diff --git a/DEPS b/DEPS
index 0828a32..dfd0b61 100644
--- a/DEPS
+++ b/DEPS
@@ -40,11 +40,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': '005a970eb9d70e729cdebf0f79551577b112aa7b',
+  'skia_revision': '6b65b98996ebc0a511aa46042607a291e6836bed',
   # 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': '9bdb339df3c76f1635054806e81693630b375b45',
+  'v8_revision': 'd4cbe5ee89a184263c5cb373c8380eb6126f56aa',
   # 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.
@@ -64,7 +64,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': '2e1a32bc49f2b7b871cf0d04f25ec45b337f06fb',
+  'pdfium_revision': '2b44441b1b01a809b6f14d44d64db9a52808cba9',
   # 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.
@@ -96,7 +96,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': '5d065952a0d8060166cecc73093775bf518966f7',
+  'catapult_revision': '6539cc70d9e1b8b9c67a3b7ff6a1a0da7a5a961d',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
diff --git a/android_webview/browser/aw_safe_browsing_blocking_page.cc b/android_webview/browser/aw_safe_browsing_blocking_page.cc
index 64ef66d6..c45f6bd5 100644
--- a/android_webview/browser/aw_safe_browsing_blocking_page.cc
+++ b/android_webview/browser/aw_safe_browsing_blocking_page.cc
@@ -59,8 +59,8 @@
     threat_details_in_progress_ =
         aw_browser_context->GetSafeBrowsingTriggerManager()
             ->StartCollectingThreatDetails(
-                safe_browsing::SafeBrowsingTriggerType::SECURITY_INTERSTITIAL,
-                web_contents, unsafe_resources[0],
+                safe_browsing::TriggerType::SECURITY_INTERSTITIAL, web_contents,
+                unsafe_resources[0],
                 aw_browser_context->GetAwURLRequestContext(),
                 /*history_service*/ nullptr,
                 sb_error_ui()->get_error_display_options());
@@ -121,12 +121,11 @@
   // to send the report.
   AwBrowserContext* aw_browser_context =
       AwBrowserContext::FromWebContents(web_contents());
-  bool report_sent =
-      aw_browser_context->GetSafeBrowsingTriggerManager()
-          ->FinishCollectingThreatDetails(
-              safe_browsing::SafeBrowsingTriggerType::SECURITY_INTERSTITIAL,
-              web_contents(), delay, did_proceed, num_visits,
-              sb_error_ui()->get_error_display_options());
+  bool report_sent = aw_browser_context->GetSafeBrowsingTriggerManager()
+                         ->FinishCollectingThreatDetails(
+                             safe_browsing::TriggerType::SECURITY_INTERSTITIAL,
+                             web_contents(), delay, did_proceed, num_visits,
+                             sb_error_ui()->get_error_display_options());
 
   if (report_sent) {
     controller()->metrics_helper()->RecordUserInteraction(
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index 4cf7eba4..0c52eabd 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -2355,7 +2355,7 @@
         }
     }
 
-    public void autofill(final SparseArray<String> values) {
+    public void autofill(final SparseArray<Object> values) {
         if (mAutofillProvider != null) {
             mAutofillProvider.autofill(values);
         }
diff --git a/ash/accelerators/accelerator_controller_unittest.cc b/ash/accelerators/accelerator_controller_unittest.cc
index 84034f9..6519ab0 100644
--- a/ash/accelerators/accelerator_controller_unittest.cc
+++ b/ash/accelerators/accelerator_controller_unittest.cc
@@ -1302,6 +1302,8 @@
       {true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, SHOW_TASK_MANAGER},
       {true, ui::VKEY_K, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN,
        SHOW_IME_MENU_BUBBLE},
+      {true, ui::VKEY_H, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN,
+       TOGGLE_HIGH_CONTRAST},
   };
 
   // The NEXT_IME accelerator requires multiple IMEs to be available.
@@ -1313,7 +1315,11 @@
     EXPECT_TRUE(ProcessInController(CreateAccelerator(data)));
 
     // Expect no notifications from the new accelerators.
-    EXPECT_TRUE(IsMessageCenterEmpty());
+    if (data.action != TOGGLE_HIGH_CONTRAST) {
+      // The toggle high contrast accelerator displays a notification specific
+      // to the high contrast mode.
+      EXPECT_TRUE(IsMessageCenterEmpty());
+    }
 
     // If the action is LOCK_SCREEN, we must reset the state by unlocking the
     // screen before we proceed testing the rest of accelerators.
diff --git a/ash/accelerators/accelerator_table.cc b/ash/accelerators/accelerator_table.cc
index a4cc748..e3fc4d98 100644
--- a/ash/accelerators/accelerator_table.cc
+++ b/ash/accelerators/accelerator_table.cc
@@ -69,7 +69,7 @@
      TOUCH_HUD_CLEAR},
     {true, ui::VKEY_P, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
      TOUCH_HUD_PROJECTION_TOGGLE},
-    {true, ui::VKEY_H, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN,
+    {true, ui::VKEY_H, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN,
      TOGGLE_HIGH_CONTRAST},
     {true, ui::VKEY_Z, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
      TOGGLE_SPOKEN_FEEDBACK},
@@ -203,7 +203,11 @@
 
     // Deprecated in M59.
     {true, ui::VKEY_K, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
-     SHOW_IME_MENU_BUBBLE}};
+     SHOW_IME_MENU_BUBBLE},
+
+    // Deprecated in M61.
+    {true, ui::VKEY_H, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN,
+     TOGGLE_HIGH_CONTRAST}};
 
 const size_t kDeprecatedAcceleratorsLength = arraysize(kDeprecatedAccelerators);
 
@@ -219,7 +223,14 @@
      IDS_SHORTCUT_TASK_MANAGER_NEW, true},
     {SHOW_IME_MENU_BUBBLE, "Ash.Accelerators.Deprecated.ShowImeMenuBubble",
      IDS_DEPRECATED_SHOW_IME_BUBBLE_MSG, IDS_SHORTCUT_IME_BUBBLE_OLD,
-     IDS_SHORTCUT_IME_BUBBLE_NEW, true}};
+     IDS_SHORTCUT_IME_BUBBLE_NEW, true},
+    {
+        TOGGLE_HIGH_CONTRAST, "Ash.Accelerators.Deprecated.ToggleHighContrast",
+        IDS_DEPRECATED_TOGGLE_HIGH_CONTRAST_MSG,
+        IDS_SHORTCUT_TOGGLE_HIGH_CONTRAST_OLD,
+        IDS_SHORTCUT_TOGGLE_HIGH_CONTRAST_NEW,
+        false  // Old accelerator was disabled immediately upon deprecation.
+    }};
 
 const size_t kDeprecatedAcceleratorsDataLength =
     arraysize(kDeprecatedAcceleratorsData);
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index 55586074..c56f701 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -1034,6 +1034,12 @@
       <message name="IDS_SHORTCUT_IME_BUBBLE_NEW" desc="the new shortcut to show the input options menu bubble in the shelf.">
         Search+Shift+K
       </message>
+      <message name="IDS_SHORTCUT_TOGGLE_HIGH_CONTRAST_OLD" desc="the old deprecated shortcut to toggle the high contrast display mode.">
+        Search+Shift+H
+      </message>
+      <message name="IDS_SHORTCUT_TOGGLE_HIGH_CONTRAST_NEW" desc="the new shortcut to toggle the high contrast display mode.">
+        Ctrl+Search+H
+      </message>
       <message name="IDS_DEPRECATED_LOCK_SCREEN_MSG"
                desc="Notification message to tell users about the deprecation of Ctrl+Shift+L shortcut to lock the screen.">
         The shortcut to lock the screen has changed. Please use <ph name="NEW_SHORTCUT">$1<ex>Search+L</ex></ph> instead of <ph name="OLD_SHORTCUT">$2<ex>Ctrl+Shift+L</ex></ph>.
@@ -1046,11 +1052,14 @@
                desc="Notification message to tell users about the deprecation of Alt+Shift+K shortcut to show the input options menu bubble in the shelf.">
         The shortcut to show the input options menu bubble in the shelf has changed. Please use <ph name="NEW_SHORTCUT">$1<ex>Search+Shift+K</ex></ph> instead of <ph name="OLD_SHORTCUT">$2<ex>Alt+Shift+K</ex></ph>.
       </message>
+      <message name="IDS_DEPRECATED_TOGGLE_HIGH_CONTRAST_MSG" desc="Notification message to tell users about the deprecation of Search+Shift+H shortcut to toggle the high contrast display mode.">
+        The shortcut to toggle High Contrast Mode has changed. Please use <ph name="NEW_SHORTCUT">$1<ex>Ctrl+Search+H</ex></ph> instead of <ph name="OLD_SHORTCUT">$2<ex>Search+Shift+H</ex></ph>.
+      </message>
 
       <!-- Notification that an accelerator was pressed, so the user knows how to toggle it back -->
       <message name="IDS_HIGH_CONTRAST_ACCEL_MSG"
                desc="Notification message to tell users that they just pressed the Search+Shift+H shortcut to toggle High Contrast Mode, and that pressing it again will toggle it off.">
-        High Contrast Mode enabled. Press Search+Shift+H again to toggle it off.
+        High Contrast Mode enabled. Press Ctrl+Search+H again to toggle it off.
       </message>
 
       <!-- Tray scale strings -->
diff --git a/ash/autoclick/mus/autoclick_application.cc b/ash/autoclick/mus/autoclick_application.cc
index 78040882..b9e52e4 100644
--- a/ash/autoclick/mus/autoclick_application.cc
+++ b/ash/autoclick/mus/autoclick_application.cc
@@ -90,13 +90,9 @@
 AutoclickApplication::~AutoclickApplication() {}
 
 void AutoclickApplication::OnStart() {
-  aura_init_ = views::AuraInit::Create(
+  aura_init_ = base::MakeUnique<views::AuraInit>(
       context()->connector(), context()->identity(), "views_mus_resources.pak",
       std::string(), nullptr, views::AuraInit::Mode::AURA_MUS);
-  if (!aura_init_) {
-    context()->QuitNow();
-    return;
-  }
   autoclick_controller_common_.reset(new AutoclickControllerCommon(
       base::TimeDelta::FromMilliseconds(kDefaultAutoclickDelayMs), this));
 }
diff --git a/ash/mus/window_manager_application.cc b/ash/mus/window_manager_application.cc
index 2f2d2ed..274c231e 100644
--- a/ash/mus/window_manager_application.cc
+++ b/ash/mus/window_manager_application.cc
@@ -129,14 +129,10 @@
   mojo_interface_factory::RegisterInterfaces(
       &registry_, base::ThreadTaskRunnerHandle::Get());
 
-  aura_init_ = views::AuraInit::Create(
+  aura_init_ = base::MakeUnique<views::AuraInit>(
       context()->connector(), context()->identity(), "ash_mus_resources.pak",
       "ash_mus_resources_200.pak", nullptr,
       views::AuraInit::Mode::AURA_MUS_WINDOW_MANAGER);
-  if (!aura_init_) {
-    context()->QuitNow();
-    return;
-  }
   window_manager_ = base::MakeUnique<WindowManager>(
       context()->connector(), ash_config_, show_primary_host_on_connect_);
 
diff --git a/ash/touch_hud/mus/touch_hud_application.cc b/ash/touch_hud/mus/touch_hud_application.cc
index 7bdd417..59f138ad 100644
--- a/ash/touch_hud/mus/touch_hud_application.cc
+++ b/ash/touch_hud/mus/touch_hud_application.cc
@@ -69,11 +69,9 @@
 TouchHudApplication::~TouchHudApplication() {}
 
 void TouchHudApplication::OnStart() {
-  aura_init_ = views::AuraInit::Create(
+  aura_init_ = base::MakeUnique<views::AuraInit>(
       context()->connector(), context()->identity(), "views_mus_resources.pak",
       std::string(), nullptr, views::AuraInit::Mode::AURA_MUS);
-  if (!aura_init_)
-    context()->QuitNow();
 }
 
 void TouchHudApplication::OnBindInterface(
diff --git a/base/atomic_ref_count.h b/base/atomic_ref_count.h
index cc56f5d..3ffa017 100644
--- a/base/atomic_ref_count.h
+++ b/base/atomic_ref_count.h
@@ -62,42 +62,6 @@
   std::atomic_int ref_count_;
 };
 
-// TODO(jbroman): Inline these functions once the above changes stick.
-
-// Increment a reference count by "increment", which must exceed 0.
-inline void AtomicRefCountIncN(volatile AtomicRefCount* ptr, int increment) {
-  const_cast<AtomicRefCount*>(ptr)->Increment(increment);
-}
-
-// Increment a reference count by 1.
-inline void AtomicRefCountInc(volatile AtomicRefCount *ptr) {
-  const_cast<AtomicRefCount*>(ptr)->Increment();
-}
-
-// Decrement a reference count by 1 and return whether the result is non-zero.
-// Insert barriers to ensure that state written before the reference count
-// became zero will be visible to a thread that has just made the count zero.
-inline bool AtomicRefCountDec(volatile AtomicRefCount *ptr) {
-  return const_cast<AtomicRefCount*>(ptr)->Decrement();
-}
-
-// Return whether the reference count is one.  If the reference count is used
-// in the conventional way, a refrerence count of 1 implies that the current
-// thread owns the reference and no other thread shares it.  This call performs
-// the test for a reference count of one, and performs the memory barrier
-// needed for the owning thread to act on the object, knowing that it has
-// exclusive access to the object.
-inline bool AtomicRefCountIsOne(volatile AtomicRefCount *ptr) {
-  return const_cast<AtomicRefCount*>(ptr)->IsOne();
-}
-
-// Return whether the reference count is zero.  With conventional object
-// referencing counting, the object will be destroyed, so the reference count
-// should never be zero.  Hence this is generally used for a debug check.
-inline bool AtomicRefCountIsZero(volatile AtomicRefCount *ptr) {
-  return const_cast<AtomicRefCount*>(ptr)->IsZero();
-}
-
 }  // namespace base
 
 #endif  // BASE_ATOMIC_REF_COUNT_H_
diff --git a/base/barrier_closure.cc b/base/barrier_closure.cc
index d7c4f1f..4426bb9 100644
--- a/base/barrier_closure.cc
+++ b/base/barrier_closure.cc
@@ -29,8 +29,8 @@
       done_closure_(std::move(done_closure)) {}
 
 void BarrierInfo::Run() {
-  DCHECK(!AtomicRefCountIsZero(&num_callbacks_left_));
-  if (!AtomicRefCountDec(&num_callbacks_left_))
+  DCHECK(!num_callbacks_left_.IsZero());
+  if (!num_callbacks_left_.Decrement())
     std::move(done_closure_).Run();
 }
 
diff --git a/base/memory/ref_counted.cc b/base/memory/ref_counted.cc
index e1558f4..efc082c 100644
--- a/base/memory/ref_counted.cc
+++ b/base/memory/ref_counted.cc
@@ -10,7 +10,7 @@
 namespace {
 
 #if DCHECK_IS_ON()
-AtomicRefCount g_cross_thread_ref_count_access_allow_count(0);
+std::atomic_int g_cross_thread_ref_count_access_allow_count(0);
 #endif
 
 }  // namespace
@@ -18,7 +18,7 @@
 namespace subtle {
 
 bool RefCountedThreadSafeBase::HasOneRef() const {
-  return AtomicRefCountIsOne(&ref_count_);
+  return ref_count_.IsOne();
 }
 
 RefCountedThreadSafeBase::~RefCountedThreadSafeBase() {
@@ -40,7 +40,7 @@
 #if DCHECK_IS_ON()
 bool RefCountedBase::CalledOnValidSequence() const {
   return sequence_checker_.CalledOnValidSequence() ||
-         !AtomicRefCountIsZero(&g_cross_thread_ref_count_access_allow_count);
+         g_cross_thread_ref_count_access_allow_count.load() != 0;
 }
 #endif
 
@@ -48,11 +48,11 @@
 
 #if DCHECK_IS_ON()
 ScopedAllowCrossThreadRefCountAccess::ScopedAllowCrossThreadRefCountAccess() {
-  AtomicRefCountInc(&g_cross_thread_ref_count_access_allow_count);
+  ++g_cross_thread_ref_count_access_allow_count;
 }
 
 ScopedAllowCrossThreadRefCountAccess::~ScopedAllowCrossThreadRefCountAccess() {
-  AtomicRefCountDec(&g_cross_thread_ref_count_access_allow_count);
+  --g_cross_thread_ref_count_access_allow_count;
 }
 #endif
 
diff --git a/base/memory/ref_counted.h b/base/memory/ref_counted.h
index ae9b6f01..db9684f 100644
--- a/base/memory/ref_counted.h
+++ b/base/memory/ref_counted.h
@@ -174,15 +174,15 @@
         << " The first reference to such a object has to be made by AdoptRef or"
         << " MakeRefCounted.";
 #endif
-    AtomicRefCountInc(&ref_count_);
+    ref_count_.Increment();
   }
 
   ALWAYS_INLINE bool ReleaseImpl() const {
 #if DCHECK_IS_ON()
     DCHECK(!in_dtor_);
-    DCHECK(!AtomicRefCountIsZero(&ref_count_));
+    DCHECK(!ref_count_.IsZero());
 #endif
-    if (!AtomicRefCountDec(&ref_count_)) {
+    if (!ref_count_.Decrement()) {
 #if DCHECK_IS_ON()
       in_dtor_ = true;
 #endif
diff --git a/base/message_loop/message_pump_fuchsia.cc b/base/message_loop/message_pump_fuchsia.cc
index fc47815..61a9f9c 100644
--- a/base/message_loop/message_pump_fuchsia.cc
+++ b/base/message_loop/message_pump_fuchsia.cc
@@ -32,7 +32,7 @@
 }
 
 MessagePumpFuchsia::MessagePumpFuchsia() : keep_running_(true) {
-  CHECK(mx_port_create(MX_PORT_OPT_V2, &port_) == MX_OK);
+  CHECK(mx_port_create(0, &port_) == MX_OK);
 }
 
 MessagePumpFuchsia::~MessagePumpFuchsia() {
diff --git a/base/task_scheduler/scheduler_single_thread_task_runner_manager_unittest.cc b/base/task_scheduler/scheduler_single_thread_task_runner_manager_unittest.cc
index f620683..00ac74c0 100644
--- a/base/task_scheduler/scheduler_single_thread_task_runner_manager_unittest.cc
+++ b/base/task_scheduler/scheduler_single_thread_task_runner_manager_unittest.cc
@@ -23,8 +23,8 @@
 
 #if defined(OS_WIN)
 #include <windows.h>
-#include <objbase.h>
 
+#include "base/win/com_init_util.h"
 #include "base/win/current_module.h"
 #endif  // defined(OS_WIN)
 
@@ -448,14 +448,8 @@
       single_thread_task_runner_manager_->CreateCOMSTATaskRunnerWithTraits(
           "A", {TaskShutdownBehavior::BLOCK_SHUTDOWN}, GetParam());
 
-  com_task_runner->PostTask(
-      FROM_HERE, BindOnce([]() {
-        HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
-        if (SUCCEEDED(hr)) {
-          ADD_FAILURE() << "COM STA was not initialized on this thread";
-          CoUninitialize();
-        }
-      }));
+  com_task_runner->PostTask(FROM_HERE, BindOnce(&win::AssertComApartmentType,
+                                                win::ComApartmentType::STA));
 
   task_tracker_.Shutdown();
 }
diff --git a/base/task_scheduler/task_scheduler_impl_unittest.cc b/base/task_scheduler/task_scheduler_impl_unittest.cc
index 9866422..b9b8d13 100644
--- a/base/task_scheduler/task_scheduler_impl_unittest.cc
+++ b/base/task_scheduler/task_scheduler_impl_unittest.cc
@@ -40,7 +40,7 @@
 #endif  // defined(OS_POSIX)
 
 #if defined(OS_WIN)
-#include <objbase.h>
+#include "base/win/com_init_util.h"
 #endif  // defined(OS_WIN)
 
 namespace base {
@@ -439,18 +439,12 @@
   WaitableEvent task_ran(WaitableEvent::ResetPolicy::MANUAL,
                          WaitableEvent::InitialState::NOT_SIGNALED);
   com_sta_task_runner->PostTask(
-      FROM_HERE,
-      Bind(
-          [](scoped_refptr<TaskRunner> single_thread_task_runner,
-             WaitableEvent* task_ran) {
-            HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
-            if (SUCCEEDED(hr)) {
-              ADD_FAILURE() << "COM STA was not initialized on this thread";
-              CoUninitialize();
-            }
-            task_ran->Signal();
-          },
-          com_sta_task_runner, Unretained(&task_ran)));
+      FROM_HERE, Bind(
+                     [](WaitableEvent* task_ran) {
+                       win::AssertComApartmentType(win::ComApartmentType::STA);
+                       task_ran->Signal();
+                     },
+                     Unretained(&task_ran)));
   task_ran.Wait();
 }
 #endif  // defined(OS_WIN)
diff --git a/base/test/scoped_async_task_scheduler.cc b/base/test/scoped_async_task_scheduler.cc
index f556d9be..3093599 100644
--- a/base/test/scoped_async_task_scheduler.cc
+++ b/base/test/scoped_async_task_scheduler.cc
@@ -14,9 +14,15 @@
 ScopedAsyncTaskScheduler::ScopedAsyncTaskScheduler() {
   DCHECK(!TaskScheduler::GetInstance());
 
-  // Instantiate a TaskScheduler with 1 thread in each of its 4 pools. Threads
+  // Instantiate a TaskScheduler with 2 threads in each of its 4 pools. Threads
   // stay alive even when they don't have work.
-  constexpr int kMaxThreads = 1;
+  // Each pool uses two threads to prevent deadlocks in unit tests that have a
+  // sequence that uses WithBaseSyncPrimitives() to wait on the result of
+  // another sequence. This isn't perfect (doesn't solve wait chains) but solves
+  // the basic use case for now.
+  // TODO(fdoray/jeffreyhe): Make the TaskScheduler dynamically replace blocked
+  // threads and get rid of this limitation. http://crbug.com/738104
+  constexpr int kMaxThreads = 2;
   const TimeDelta kSuggestedReclaimTime = TimeDelta::Max();
   const SchedulerWorkerPoolParams worker_pool_params(
       SchedulerWorkerPoolParams::StandbyThreadPolicy::ONE, kMaxThreads,
diff --git a/base/test/scoped_task_environment.cc b/base/test/scoped_task_environment.cc
index 6729460..8028e9eb 100644
--- a/base/test/scoped_task_environment.cc
+++ b/base/test/scoped_task_environment.cc
@@ -92,9 +92,15 @@
       task_tracker_(new TestTaskTracker()) {
   CHECK(!TaskScheduler::GetInstance());
 
-  // Instantiate a TaskScheduler with 1 thread in each of its 4 pools. Threads
+  // Instantiate a TaskScheduler with 2 threads in each of its 4 pools. Threads
   // stay alive even when they don't have work.
-  constexpr int kMaxThreads = 1;
+  // Each pool uses two threads to prevent deadlocks in unit tests that have a
+  // sequence that uses WithBaseSyncPrimitives() to wait on the result of
+  // another sequence. This isn't perfect (doesn't solve wait chains) but solves
+  // the basic use case for now.
+  // TODO(fdoray/jeffreyhe): Make the TaskScheduler dynamically replace blocked
+  // threads and get rid of this limitation. http://crbug.com/738104
+  constexpr int kMaxThreads = 2;
   const TimeDelta kSuggestedReclaimTime = TimeDelta::Max();
   const SchedulerWorkerPoolParams worker_pool_params(
       SchedulerWorkerPoolParams::StandbyThreadPolicy::ONE, kMaxThreads,
diff --git a/base/win/iunknown_impl.cc b/base/win/iunknown_impl.cc
index 9baa0f3..2a88439 100644
--- a/base/win/iunknown_impl.cc
+++ b/base/win/iunknown_impl.cc
@@ -15,12 +15,12 @@
 }
 
 ULONG STDMETHODCALLTYPE IUnknownImpl::AddRef() {
-  base::AtomicRefCountInc(&ref_count_);
+  ref_count_.Increment();
   return 1;
 }
 
 ULONG STDMETHODCALLTYPE IUnknownImpl::Release() {
-  if (!base::AtomicRefCountDec(&ref_count_)) {
+  if (!ref_count_.Decrement()) {
     delete this;
     return 0;
   }
diff --git a/build/android/pylib/instrumentation/instrumentation_test_instance.py b/build/android/pylib/instrumentation/instrumentation_test_instance.py
index 0b3fbccc..d6077404 100644
--- a/build/android/pylib/instrumentation/instrumentation_test_instance.py
+++ b/build/android/pylib/instrumentation/instrumentation_test_instance.py
@@ -507,6 +507,9 @@
     self._edit_shared_prefs = []
     self._initializeEditPrefsAttributes(args)
 
+    self._replace_system_package = None
+    self._initializeReplaceSystemPackageAttributes(args)
+
     self._external_shard_index = args.test_launcher_shard_index
     self._total_external_shards = args.test_launcher_total_shards
 
@@ -690,6 +693,12 @@
     self._edit_shared_prefs = shared_preference_utils.ExtractSettingsFromJson(
         args.shared_prefs_file)
 
+  def _initializeReplaceSystemPackageAttributes(self, args):
+    if (not hasattr(args, 'replace_system_package')
+        or not args.replace_system_package):
+      return
+    self._replace_system_package = args.replace_system_package
+
   @property
   def additional_apks(self):
     return self._additional_apks
@@ -747,6 +756,10 @@
     return self._render_results_dir
 
   @property
+  def replace_system_package(self):
+    return self._replace_system_package
+
+  @property
   def screenshot_dir(self):
     return self._screenshot_dir
 
diff --git a/build/android/pylib/local/device/local_device_instrumentation_test_run.py b/build/android/pylib/local/device/local_device_instrumentation_test_run.py
index 7e92909..9122d3ae 100644
--- a/build/android/pylib/local/device/local_device_instrumentation_test_run.py
+++ b/build/android/pylib/local/device/local_device_instrumentation_test_run.py
@@ -7,12 +7,14 @@
 import os
 import posixpath
 import re
+import sys
 import tempfile
 import time
 
 from devil.android import device_errors
 from devil.android import device_temp_file
 from devil.android import flag_changer
+from devil.android.tools import system_app
 from devil.utils import reraiser_thread
 from pylib import valgrind_tools
 from pylib.android import logdog_logcat_monitor
@@ -112,6 +114,7 @@
     super(LocalDeviceInstrumentationTestRun, self).__init__(env, test_instance)
     self._flag_changers = {}
     self._ui_capture_dir = dict()
+    self._replace_package_contextmanager = None
 
   #override
   def TestPackage(self):
@@ -125,6 +128,19 @@
     def individual_device_set_up(dev, host_device_tuples):
       steps = []
 
+      if self._test_instance.replace_system_package:
+        # We need the context manager to be applied before modifying any shared
+        # preference files in case the replacement APK needs to be set up, and
+        # it needs to be applied while the test is running. Thus, it needs to
+        # be applied early during setup, but must still be applied during
+        # _RunTest, which isn't possible using 'with' without applying the
+        # context manager up in test_runner. Instead, we manually invoke
+        # its __enter__ and __exit__ methods in setup and teardown
+        self._replace_package_contextmanager = system_app.ReplaceSystemApp(
+            dev, self._test_instance.replace_system_package.package,
+            self._test_instance.replace_system_package.replacement_apk)
+        steps.append(self._replace_package_contextmanager.__enter__)
+
       def install_helper(apk, permissions):
         @trace_event.traced("apk_path")
         def install_helper_internal(apk_path=apk.path):
@@ -260,6 +276,9 @@
       if self._test_instance.ui_screenshot_dir:
         pull_ui_screen_captures(dev)
 
+      if self._replace_package_contextmanager:
+        self._replace_package_contextmanager.__exit__(*sys.exc_info())
+
     @trace_event.traced
     def pull_ui_screen_captures(dev):
       file_names = dev.ListDirectory(self._ui_capture_dir[dev])
diff --git a/build/android/pylib/results/presentation/test_results_presentation.py b/build/android/pylib/results/presentation/test_results_presentation.py
index 6187fe2..cb51590 100755
--- a/build/android/pylib/results/presentation/test_results_presentation.py
+++ b/build/android/pylib/results/presentation/test_results_presentation.py
@@ -110,15 +110,14 @@
 def logs_cell(result, test_name, suite_name):
   """Formats result logs data for processing in jinja template."""
   link_list = []
-  for name, href in result.get('links', {}).iteritems():
+  result_link_dict = result.get('links', {})
+  result_link_dict['flakiness'] = flakiness_dashbord_link(
+      test_name, suite_name)
+  for name, href in sorted(result_link_dict.items()):
     link_list.append(link(
         data=name,
         href=href,
         target=LinkTarget.NEW_TAB))
-  link_list.append(link(
-      data='flakiness',
-      href=flakiness_dashbord_link(test_name, suite_name),
-      target=LinkTarget.NEW_TAB))
   if link_list:
     return links_cell(link_list)
   else:
diff --git a/build/android/test_runner.py b/build/android/test_runner.py
index 835888b0..3e32f81b 100755
--- a/build/android/test_runner.py
+++ b/build/android/test_runner.py
@@ -387,6 +387,24 @@
       '--render-results-directory',
       dest='render_results_dir',
       help='Directory to pull render test result images off of the device to.')
+  def package_replacement(arg):
+    split_arg = arg.split(',')
+    if len(split_arg) != 2:
+      raise argparse.ArgumentError(
+          'Expected two comma-separated strings for --replace-system-package, '
+          'received %d' % len(split_arg))
+    PackageReplacement = collections.namedtuple('PackageReplacement',
+                                                ['package', 'replacement_apk'])
+    return PackageReplacement(package=split_arg[0],
+                              replacement_apk=os.path.realpath(split_arg[1]))
+  parser.add_argument(
+      '--replace-system-package',
+      type=package_replacement, default=None,
+      help='Specifies a system package to replace with a given APK for the '
+           'duration of the test. Given as a comma-separated pair of strings, '
+           'the first element being the package and the second the path to the '
+           'replacement APK. Only supports replacing one package. Example: '
+           '--replace-system-package com.example.app,path/to/some.apk')
   parser.add_argument(
       '--runtime-deps-path',
       dest='runtime_deps_path', type=os.path.realpath,
@@ -930,6 +948,14 @@
     else:
       parser.error('unrecognized arguments: %s' % ' '.join(unknown_args))
 
+  # --replace-system-package has the potential to cause issues if
+  # --enable-concurrent-adb is set, so disallow that combination
+  if (hasattr(args, 'replace_system_package') and
+      hasattr(args, 'enable_concurrent_adb') and args.replace_system_package and
+      args.enable_concurrent_adb):
+    parser.error('--replace-system-package and --enable-concurrent-adb cannot '
+                 'be used together')
+
   try:
     return RunTestsCommand(args)
   except base_error.BaseError as e:
diff --git a/build/android/test_runner.pydeps b/build/android/test_runner.pydeps
index 14d58e8..fddebbd3f 100644
--- a/build/android/test_runner.pydeps
+++ b/build/android/test_runner.pydeps
@@ -57,6 +57,8 @@
 ../../third_party/catapult/devil/devil/android/tools/__init__.py
 ../../third_party/catapult/devil/devil/android/tools/device_recovery.py
 ../../third_party/catapult/devil/devil/android/tools/device_status.py
+../../third_party/catapult/devil/devil/android/tools/script_common.py
+../../third_party/catapult/devil/devil/android/tools/system_app.py
 ../../third_party/catapult/devil/devil/android/valgrind_tools/__init__.py
 ../../third_party/catapult/devil/devil/android/valgrind_tools/base_tool.py
 ../../third_party/catapult/devil/devil/base_error.py
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index 0b0ce452..7ae86ac 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -376,6 +376,7 @@
       outputs = [
         invoker.output,
       ]
+      depfile = "$target_gen_dir/$target_name.d"
 
       args = [
         # This is a list of .sources files.
@@ -383,6 +384,8 @@
         "--output",
         rebase_path(invoker.output, root_build_dir),
         "--no_register_java=$_rebase_exception_java_files",
+        "--depfile",
+        rebase_path(depfile, root_build_dir),
       ]
     }
   }
diff --git a/build/config/ios/rules.gni b/build/config/ios/rules.gni
index d520f5ae..2716bf62 100644
--- a/build/config/ios/rules.gni
+++ b/build/config/ios/rules.gni
@@ -130,12 +130,17 @@
 #       string, extension of the bundle, used to generate bundle name.
 #
 #   bundle_binary_target
-#       string, label of the target generating the bundle main binary.
+#       (optional) string, label of the target generating the bundle main
+#       binary. This target and bundle_binary_path are mutually exclusive.
 #
 #   bundle_binary_output
 #       (optional) string, base name of the binary generated by the
 #       bundle_binary_target target, defaults to the target name.
 #
+#   bundle_binary_path
+#       (optional) string, path to the bundle main binary. This target and
+#       bundle_binary_target are mutually exclusive.
+#
 #   output_name:
 #       (optional) string, name of the generated application, if omitted,
 #       defaults to the target_name.
@@ -162,8 +167,10 @@
          "product_type must be defined for $target_name")
   assert(defined(invoker.bundle_extension),
          "bundle_extension must be defined for $target_name")
-  assert(defined(invoker.bundle_binary_target),
-         "bundle_binary_target must be defined for $target_name")
+  assert(
+      defined(invoker.bundle_binary_target) !=
+          defined(invoker.bundle_binary_path),
+      "Only one of bundle_binary_target or bundle_binary_path may be specified in " + target_name)
 
   _target_name = target_name
   _output_name = target_name
@@ -171,16 +178,19 @@
     _output_name = invoker.output_name
   }
 
-  _bundle_binary_target = invoker.bundle_binary_target
-  _bundle_binary_output = get_label_info(_bundle_binary_target, "name")
-  if (defined(invoker.bundle_binary_output)) {
-    _bundle_binary_output = invoker.bundle_binary_output
+  if (defined(invoker.bundle_binary_path)) {
+    _bundle_binary_path = invoker.bundle_binary_path
+  } else {
+    _bundle_binary_target = invoker.bundle_binary_target
+    _bundle_binary_output = get_label_info(_bundle_binary_target, "name")
+    if (defined(invoker.bundle_binary_output)) {
+      _bundle_binary_output = invoker.bundle_binary_output
+    }
+    _bundle_binary_path =
+        get_label_info(_bundle_binary_target, "target_out_dir") +
+        "/$_bundle_binary_output"
   }
 
-  _bundle_binary_path =
-      get_label_info(_bundle_binary_target, "target_out_dir") +
-      "/$_bundle_binary_output"
-
   _bundle_extension = invoker.bundle_extension
   _bundle_root_dir = "$root_out_dir/$_output_name$_bundle_extension"
 
@@ -225,7 +235,10 @@
     if (!defined(public_deps)) {
       public_deps = []
     }
-    public_deps += [ _bundle_binary_target ]
+
+    if (defined(invoker.bundle_binary_target)) {
+      public_deps += [ invoker.bundle_binary_target ]
+    }
 
     if (defined(invoker.bundle_deps)) {
       if (!defined(deps)) {
@@ -1352,10 +1365,6 @@
 #       string, name of the target that depends on the generated bundle, this
 #       value is used to restrict visibilities.
 #
-#   host_output:
-#       (optional) string, name of the application generated by host_target, if
-#       omitted, defaults to the host_target.
-#
 #   output_name
 #       (optional) string, name of the generated application, if omitted,
 #       defaults to the target_name.
@@ -1435,17 +1444,13 @@
   } else {
     _info_plist_target = _target_name + "_info_plist"
     _info_plist_bundle = _target_name + "_info_plist_bundle"
-    _host_output = invoker.host_target
-    if (defined(invoker.host_output)) {
-      _host_output = invoker.host_output
-    }
 
     ios_info_plist(_info_plist_target) {
       testonly = true
       visibility = [ ":$_info_plist_bundle" ]
 
       info_plist = "//build/config/ios/Module-Info.plist"
-      executable_name = _host_output
+      executable_name = _target_name
 
       if (ios_automatically_manage_certs) {
         # Use the same bundle identifier for EarlGrey tests as for unit tests
@@ -1621,36 +1626,41 @@
   configs = default_executable_configs
 }
 
-# Template to build a XCUITest that consists of two parts: the test runner
-# application bundle and the xctest dynamic library.
+# Template to build a xcuitest test runner bundle.
+#
+# Xcode requires a test runner application with a copy of the XCTest dynamic
+# library bundle in it for the XCUITest to run. The test runner bundle is created
+# by copying the system bundle XCTRunner.app from Xcode SDK with the plist file
+# being properly tweaked, and a xctest and it needs to be code signed in order
+# to run on devices.
 #
 # Arguments
 #
-#   deps:
-#       list of labels to depends on, these values are used to create the
-#       xctest dynamic library.
+#   xctest_bundle
+#       string, name of the dependent xctest bundle target.
 #
-# This template defines two targets, one named "${target_name}" is the xctest
-# dynamic library, and the other named "${target_name}_runner" is the test
-# runner application bundle.
+#   output_name
+#       (optional) string, name of the generated application, if omitted,
+#       defaults to the target_name.
 #
-template("ios_xcuitest_test") {
-  assert(false,
-         "ios_xcuitest_test is incomplete and should not be used, see " +
-             "crbug.com/709289 for tracking")
+template("ios_xcuitest_test_runner_bundle") {
+  assert(defined(invoker.xctest_bundle),
+         "xctest_bundle must be defined for $target_name")
 
-  _xcuitest_target = target_name
-  _xcuitest_runner_target = _xcuitest_target + "_runner"
+  _target_name = target_name
+  _output_name = target_name
+  if (defined(invoker.output_name)) {
+    _output_name = invoker.output_name
+  }
+
   _xctrunner_path =
       "$ios_sdk_platform_path/Developer/Library/Xcode/Agents/XCTRunner.app"
 
-  _xcuitest_runner_info_plist_merge_plist =
-      _xcuitest_runner_target + "_info_plist_merge_plist"
-  _xcuitest_runner_info_plist_target = _xcuitest_runner_target + "_info_plist"
-  _xcuitest_runner_info_plist_bundle =
-      _xcuitest_runner_target + "_info_plist_bundle"
+  _info_plist_merge_plist = _target_name + "_info_plist_merge_plist"
+  _info_plist_target = _target_name + "_info_plist"
+  _info_plist_bundle = _target_name + "_info_plist_bundle"
 
-  action(_xcuitest_runner_info_plist_merge_plist) {
+  action(_info_plist_merge_plist) {
     testonly = true
     script = "//build/config/mac/plist_util.py"
 
@@ -1663,7 +1673,7 @@
       "//ios/chrome/app/resources/XCTRunnerAddition+Info.plist",
     ]
 
-    _output_name = "$target_gen_dir/${_xcuitest_runner_target}_merged.plist"
+    _output_name = "$target_gen_dir/${_target_name}_merged.plist"
     outputs = [
       _output_name,
     ]
@@ -1674,19 +1684,117 @@
            ] + rebase_path(sources, root_build_dir)
   }
 
-  ios_info_plist(_xcuitest_runner_info_plist_target) {
+  ios_info_plist(_info_plist_target) {
     testonly = true
-    visibility = [ ":$_xcuitest_runner_info_plist_bundle" ]
+    visibility = [ ":$_info_plist_bundle" ]
 
-    executable_name = _xcuitest_target
-    info_plist_target = ":$_xcuitest_runner_info_plist_merge_plist"
+    executable_name = _target_name
+    info_plist_target = ":$_info_plist_merge_plist"
+
     if (ios_automatically_manage_certs) {
       # Use the same bundle identifier for XCUITest tests as for unit tests
       # when managing certificates as the number of free certs is limited.
       extra_substitutions =
-          [ "PRODUCT_NAME=${ios_generic_test_bundle_id_suffix}" ]
+          [ "EXECUTABLE_NAME=gtest.${ios_generic_test_bundle_id_suffix}" ]
     }
   }
+
+  bundle_data(_info_plist_bundle) {
+    testonly = true
+    visibility = [ ":$_target_name" ]
+
+    public_deps = [
+      ":$_info_plist_target",
+    ]
+
+    sources = get_target_outputs(":$_info_plist_target")
+    outputs = [
+      "{{bundle_root_dir}}/Info.plist",
+    ]
+  }
+
+  _pkginfo_bundle = _target_name + "_pkginfo_bundle"
+  bundle_data(_pkginfo_bundle) {
+    testonly = true
+    visibility = [ ":$_target_name" ]
+
+    sources = [
+      "$_xctrunner_path/PkgInfo",
+    ]
+
+    outputs = [
+      "{{bundle_root_dir}}/PkgInfo",
+    ]
+  }
+
+  _xctest_bundle = invoker.xctest_bundle
+  create_signed_bundle(_target_name) {
+    testonly = true
+
+    bundle_binary_path = "$_xctrunner_path/XCTRunner"
+    bundle_extension = ".app"
+    product_type = "com.apple.product-type.application"
+
+    output_name = _output_name
+
+    # Xcode needs the following frameworks installed in the application
+    # (and signed) for the XCUITest to run, so install them using
+    # extra_system_frameworks.
+    extra_system_frameworks = [ "$ios_sdk_platform_path/Developer/Library/Frameworks/XCTest.framework" ]
+
+    bundle_deps = [
+      ":$_info_plist_bundle",
+      ":$_pkginfo_bundle",
+      ":$_xctest_bundle",
+    ]
+  }
+}
+
+# Template to build a XCUITest that consists of two parts: the test runner
+# application bundle and the xctest dynamic library.
+#
+# Arguments
+#
+#   deps:
+#       list of labels to depends on, these values are used to create the
+#       xctest dynamic library.
+#
+# This template defines two targets, one named "${target_name}_module" is the
+# xctest dynamic library, and the other named "${target_name}_runner" is the
+# test runner application bundle.
+#
+template("ios_xcuitest_test") {
+  assert(false,
+         "ios_xcuitest_test is incomplete and should not be used, see " +
+             "crbug.com/709289 for tracking")
+  assert(defined(invoker.deps), "deps must be defined for $target_name")
+
+  _xcuitest_target = target_name
+  _xcuitest_runner_target = _xcuitest_target + "_runner"
+  _xcuitest_module_target = _xcuitest_target + "_module"
+
+  group(_xcuitest_target) {
+    testonly = true
+
+    deps = [
+      ":$_xcuitest_runner_target",
+    ]
+  }
+
+  _xcuitest_module_output = _xcuitest_target
+  ios_xctest_bundle(_xcuitest_module_target) {
+    product_type = "com.apple.product-type.bundle.ui-testing"
+    host_target = _xcuitest_runner_target
+    output_name = _xcuitest_module_output
+
+    deps = invoker.deps
+  }
+
+  _xcuitest_runner_output = _xcuitest_target + "-Runner"
+  ios_xcuitest_test_runner_bundle(_xcuitest_runner_target) {
+    output_name = _xcuitest_runner_output
+    xctest_bundle = _xcuitest_module_target + "_bundle"
+  }
 }
 
 set_defaults("ios_xcuitest_test") {
diff --git a/build/toolchain/mac/compile_xcassets.py b/build/toolchain/mac/compile_xcassets.py
index 1a6e0c6..2c1a472 100644
--- a/build/toolchain/mac/compile_xcassets.py
+++ b/build/toolchain/mac/compile_xcassets.py
@@ -4,11 +4,87 @@
 
 import argparse
 import os
+import re
 import subprocess
 import sys
 
+"""Wrapper around actool to compile assets catalog.
 
-def CompileXCAssets(
+The script compile_xcassets.py is a wrapper around actool to compile
+assets catalog to Assets.car that turns warning into errors. It also
+fixes some quirks of actool to make it work from ninja (mostly that
+actool seems to require absolute path but gn generates command-line
+with relative paths).
+
+The wrapper filter out any message that is not a section header and
+not a warning or error message, and fails if filtered output is not
+empty. This should to treat all warnings as error until actool has
+an option to fail with non-zero error code when there are warnings.
+"""
+
+# Pattern matching a section header in the output of actool.
+SECTION_HEADER = re.compile('^/\\* ([a-z.]*) \\*/$')
+
+# Pattern matching an interesting message in the output of actool.
+MESSAGE_PATTERN = re.compile('^([^:]*\.xcassets):.* (error|warning): .*$')
+
+# Name of the section containing informational messages that can be ignored.
+NOTICE_SECTION = 'com.apple.actool.compilation-results'
+
+
+def FilterCompilerOutput(compiler_output, relative_paths):
+  """Filers actool compilation output.
+
+  The compiler output is composed of multiple sections for each different
+  level of output (error, warning, notices, ...). Each section starts with
+  the section name on a single line, followed by all the messages from the
+  section.
+
+  The function filter any lines that are not in com.apple.actool.errors or
+  com.apple.actool.document.warnings sections. For each messages, in those
+  sections, they are also filtered if they do not follow MESSAGE_PATTERN
+  pattern.
+
+  See crbug.com/730054 and crbug.com/739163 for some example messages that
+  pollute the output of actool and cause flaky builds.
+
+  Args:
+    compiler_output: string containing the output generated by the
+      compiler (contains both stdout and stderr)
+    relative_paths: mapping from absolute to relative paths used to
+      convert paths in the warning and error messages (unknown paths
+      will be left unaltered)
+
+  Returns:
+    The filtered output of the compiler. If the compilation was a
+    success, then the output will be empty, otherwise it will use
+    relative path and omit any irrelevant output.
+  """
+
+  filtered_output = []
+  current_section = None
+  for line in compiler_output.splitlines():
+    match = SECTION_HEADER.search(line)
+    if match is not None:
+      current_section = match.group(1)
+      if current_section != NOTICE_SECTION:
+        filtered_output.append(line + '\n')
+      continue
+    match = MESSAGE_PATTERN.search(line)
+    if match is not None:
+      if current_section == NOTICE_SECTION:
+        continue
+
+      absolute_path = match.group(1)
+      relative_path = relative_paths.get(absolute_path, absolute_path)
+      if absolute_path != relative_path:
+        line = line[:match.span(1)[0]] + relative_path + line[match.span(1)[1]:]
+      filtered_output.append(line + '\n')
+
+  return ''.join(filtered_output)
+
+
+def CompileAssetCatalog(
     output, platform, product_type, min_deployment_target, inputs):
   """Compile the .xcassets bundles to an asset catalog using actool.
 
@@ -34,10 +110,20 @@
   else:
     command.extend(['--target-device', 'iphone', '--target-device', 'ipad'])
 
+  relative_paths = {}
+
   # actool crashes if paths are relative, so convert input and output paths
-  # to absolute paths.
+  # to absolute paths, and record the relative paths to fix them back when
+  # filtering the output.
+  absolute_output = os.path.abspath(output)
+  relative_paths[output] = absolute_output
+  relative_paths[os.path.dirname(output)] = os.path.dirname(absolute_output)
   command.extend(['--compile', os.path.dirname(os.path.abspath(output))])
-  command.extend(map(os.path.abspath, inputs))
+
+  for relative_path in inputs:
+    absolute_path = os.path.abspath(relative_path)
+    relative_paths[absolute_path] = relative_path
+    command.append(absolute_path)
 
   # Run actool and redirect stdout and stderr to the same pipe (as actool
   # is confused about what should go to stderr/stdout).
@@ -45,31 +131,10 @@
       command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
   stdout, _ = process.communicate()
 
-  if process.returncode:
-    sys.stderr.write(stdout)
-    sys.exit(process.returncode)
+  # Filter the output to remove all garbarge and to fix the paths.
+  stdout = FilterCompilerOutput(stdout, relative_paths)
 
-  # In case of success, the output looks like the following:
-  #   /* com.apple.actool.compilation-results */
-  #   /Full/Path/To/Bundle.app/Assets.car
-  #
-  # Ignore any lines in the output matching those (last line is an empty line)
-  # and consider that the build failed if the output contains any other lines.
-  for line in stdout.splitlines():
-    if not line:
-      continue
-    if line == '/* com.apple.actool.compilation-results */':
-      continue
-    if line == os.path.abspath(output):
-      continue
-    # crbug.com/730054 Xcode 9's beta introduced a CoreUI(DEBUG) message and
-    # IBMessageChannelErrorDomain message that can be ignored.
-    if line.startswith('CoreUI(DEBUG)'):
-      continue
-    if 'Error Domain=IBMessageChannelErrorDomain Code=4' in line:
-      continue
-    if 'Attempting to remove the stale service in order to add' in line:
-      continue
+  if process.returncode or stdout:
     sys.stderr.write(stdout)
     sys.exit(1)
 
@@ -101,7 +166,7 @@
         'to the containing bundle: %s\n' % (args.output,))
     sys.exit(1)
 
-  CompileXCAssets(
+  CompileAssetCatalog(
       args.output,
       args.platform,
       args.product_type,
diff --git a/build/toolchain/mac/compile_xcassets_unittests.py b/build/toolchain/mac/compile_xcassets_unittests.py
new file mode 100644
index 0000000..530d0c9
--- /dev/null
+++ b/build/toolchain/mac/compile_xcassets_unittests.py
@@ -0,0 +1,69 @@
+# 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.
+
+import unittest
+import compile_xcassets
+
+
+class TestFilterCompilerOutput(unittest.TestCase):
+
+  relative_paths = {
+    '/Users/janedoe/chromium/src/Chromium.xcassets':
+        '../../Chromium.xcassets',
+    '/Users/janedoe/chromium/src/out/Default/Chromium.app/Assets.car':
+        'Chromium.app/Assets.car',
+  }
+
+  def testNoError(self):
+    self.assertEquals(
+        '',
+        compile_xcassets.FilterCompilerOutput(
+            '/* com.apple.actool.compilation-results */\n'
+            '/Users/janedoe/chromium/src/out/Default/Chromium.app/Assets.car\n',
+            self.relative_paths))
+
+  def testNoErrorRandomMessages(self):
+    self.assertEquals(
+        '',
+        compile_xcassets.FilterCompilerOutput(
+            '2017-07-04 04:59:19.460 ibtoold[23487:41214] CoreSimulator is att'
+                'empting to unload a stale CoreSimulatorService job.  Existing'
+                ' job (com.apple.CoreSimulator.CoreSimulatorService.179.1.E8tt'
+                'yeDeVgWK) is from an older version and is being removed to pr'
+                'event problems.\n'
+            '/* com.apple.actool.compilation-results */\n'
+            '/Users/janedoe/chromium/src/out/Default/Chromium.app/Assets.car\n',
+            self.relative_paths))
+
+  def testWarning(self):
+    self.assertEquals(
+        '/* com.apple.actool.document.warnings */\n'
+        '../../Chromium.xcassets:./image1.imageset/[universal][][][1x][][][]['
+            '][][]: warning: The file "image1.png" for the image set "image1"'
+            ' does not exist.\n',
+        compile_xcassets.FilterCompilerOutput(
+            '/* com.apple.actool.document.warnings */\n'
+            '/Users/janedoe/chromium/src/Chromium.xcassets:./image1.imageset/['
+                'universal][][][1x][][][][][][]: warning: The file "image1.png'
+                '" for the image set "image1" does not exist.\n'
+            '/* com.apple.actool.compilation-results */\n'
+            '/Users/janedoe/chromium/src/out/Default/Chromium.app/Assets.car\n',
+            self.relative_paths))
+
+  def testError(self):
+    self.assertEquals(
+        '/* com.apple.actool.errors */\n'
+        '../../Chromium.xcassets: error: The output directory "/Users/janedoe/'
+            'chromium/src/out/Default/Chromium.app" does not exist.\n',
+        compile_xcassets.FilterCompilerOutput(
+            '/* com.apple.actool.errors */\n'
+            '/Users/janedoe/chromium/src/Chromium.xcassets: error: The output '
+                'directory "/Users/janedoe/chromium/src/out/Default/Chromium.a'
+                'pp" does not exist.\n'
+            '/* com.apple.actool.compilation-results */\n',
+            self.relative_paths))
+
+
+if __name__ == '__main__':
+  unittest.main()
diff --git a/build/vs_toolchain.py b/build/vs_toolchain.py
index e131a0d..6a3c2c1 100755
--- a/build/vs_toolchain.py
+++ b/build/vs_toolchain.py
@@ -346,8 +346,8 @@
     # Update 3 final with 10.0.15063.468 SDK and no vctip.exe.
     return ['f53e4598951162bad6330f7a167486c7ae5db1e5']
   if env_version == '2017':
-    # VS 2017 Update 3 Preview 2 with 10.0.15063.0 SDK and patched event.h.
-    return ['425bd64734a387734dfcf445b285a7c5073e4262']
+    # VS 2017 Update 3 Preview 3 with 10.0.15063.468 SDK.
+    return ['15d1e1d9da02f10de7b95137b314236068025fa8']
   raise Exception('Unsupported VS version %s' % env_version)
 
 
diff --git a/cc/layers/render_surface_impl.cc b/cc/layers/render_surface_impl.cc
index f124602..1f03887 100644
--- a/cc/layers/render_surface_impl.cc
+++ b/cc/layers/render_surface_impl.cc
@@ -403,6 +403,9 @@
     // mask layers.
     DCHECK(BlendMode() != SkBlendMode::kDstIn)
         << "kDstIn blend mode with mask layer is unsupported.";
+    TRACE_EVENT1("cc", "RenderSurfaceImpl::AppendQuads",
+                 "mask_layer_gpu_memory_usage",
+                 mask_layer->GPUMemoryUsageInBytes());
     if (mask_layer->mask_type() == Layer::LayerMaskType::MULTI_TEXTURE_MASK) {
       TileMaskLayer(render_pass, shared_quad_state, visible_layer_rect);
       return;
diff --git a/cc/surfaces/compositor_frame_sink_support.cc b/cc/surfaces/compositor_frame_sink_support.cc
index 907a0e8..f27b67f 100644
--- a/cc/surfaces/compositor_frame_sink_support.cc
+++ b/cc/surfaces/compositor_frame_sink_support.cc
@@ -346,8 +346,9 @@
 Surface* CompositorFrameSinkSupport::CreateSurface(
     const SurfaceInfo& surface_info) {
   seen_first_frame_activation_ = false;
-  return surface_manager_->CreateSurface(weak_factory_.GetWeakPtr(),
-                                         surface_info, needs_sync_tokens_);
+  return surface_manager_->CreateSurface(
+      weak_factory_.GetWeakPtr(), surface_info,
+      surface_manager_->GetPrimaryBeginFrameSource(), needs_sync_tokens_);
 }
 
 void CompositorFrameSinkSupport::RequestCopyOfSurface(
diff --git a/cc/surfaces/surface.cc b/cc/surfaces/surface.cc
index 29c1be3..99e479d 100644
--- a/cc/surfaces/surface.cc
+++ b/cc/surfaces/surface.cc
@@ -27,12 +27,13 @@
 Surface::Surface(const SurfaceInfo& surface_info,
                  SurfaceManager* surface_manager,
                  base::WeakPtr<SurfaceClient> surface_client,
+                 BeginFrameSource* begin_frame_source,
                  bool needs_sync_tokens)
     : surface_info_(surface_info),
       previous_frame_surface_id_(surface_info.id()),
       surface_manager_(surface_manager),
       surface_client_(std::move(surface_client)),
-      deadline_(surface_manager_->GetPrimaryBeginFrameSource()),
+      deadline_(begin_frame_source),
       frame_index_(kFrameIndexStart),
       needs_sync_tokens_(needs_sync_tokens) {
   deadline_.AddObserver(this);
diff --git a/cc/surfaces/surface.h b/cc/surfaces/surface.h
index f6532b60..8b9be1b9 100644
--- a/cc/surfaces/surface.h
+++ b/cc/surfaces/surface.h
@@ -45,6 +45,7 @@
   Surface(const SurfaceInfo& surface_info,
           SurfaceManager* surface_manager,
           base::WeakPtr<SurfaceClient> surface_client,
+          BeginFrameSource* begin_frame_source,
           bool needs_sync_tokens);
   ~Surface();
 
diff --git a/cc/surfaces/surface_dependency_deadline.cc b/cc/surfaces/surface_dependency_deadline.cc
index 41d7316..cd2aa1d 100644
--- a/cc/surfaces/surface_dependency_deadline.cc
+++ b/cc/surfaces/surface_dependency_deadline.cc
@@ -4,8 +4,6 @@
 
 #include "cc/surfaces/surface_dependency_deadline.h"
 
-#include "cc/surfaces/surface_dependency_tracker.h"
-
 namespace cc {
 
 SurfaceDependencyDeadline::SurfaceDependencyDeadline(
diff --git a/cc/surfaces/surface_dependency_tracker.h b/cc/surfaces/surface_dependency_tracker.h
index 0b31814d..ffa95d2 100644
--- a/cc/surfaces/surface_dependency_tracker.h
+++ b/cc/surfaces/surface_dependency_tracker.h
@@ -73,10 +73,6 @@
   // CompositorFrames with missing dependencies.
   base::flat_set<SurfaceId> surfaces_with_missing_dependencies_;
 
-  // The set of SurfaceIds to which corresponding CompositorFrames have not
-  // arrived by the time their deadline fired.
-  base::flat_set<SurfaceId> late_surfaces_by_id_;
-
   DISALLOW_COPY_AND_ASSIGN(SurfaceDependencyTracker);
 };
 
diff --git a/cc/surfaces/surface_manager.cc b/cc/surfaces/surface_manager.cc
index 3268cf0a..3e6815e 100644
--- a/cc/surfaces/surface_manager.cc
+++ b/cc/surfaces/surface_manager.cc
@@ -31,6 +31,7 @@
 
 SurfaceManager::SurfaceManager(LifetimeType lifetime_type)
     : lifetime_type_(lifetime_type),
+      dependency_tracker_(this),
       root_surface_id_(FrameSinkId(0u, 0u),
                        LocalSurfaceId(1u, base::UnguessableToken::Create())),
       weak_factory_(this) {
@@ -61,21 +62,16 @@
 }
 #endif
 
-void SurfaceManager::SetDependencyTracker(
-    SurfaceDependencyTracker* dependency_tracker) {
-  dependency_tracker_ = dependency_tracker;
-}
-
 void SurfaceManager::RequestSurfaceResolution(
     Surface* surface,
     SurfaceDependencyDeadline* deadline) {
-  if (dependency_tracker_)
-    dependency_tracker_->RequestSurfaceResolution(surface, deadline);
+  dependency_tracker_.RequestSurfaceResolution(surface, deadline);
 }
 
 Surface* SurfaceManager::CreateSurface(
     base::WeakPtr<SurfaceClient> surface_client,
     const SurfaceInfo& surface_info,
+    BeginFrameSource* begin_frame_source,
     bool needs_sync_tokens) {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(surface_info.is_valid());
@@ -85,8 +81,9 @@
   // return.
   auto it = surface_map_.find(surface_info.id());
   if (it == surface_map_.end()) {
-    surface_map_[surface_info.id()] = base::MakeUnique<Surface>(
-        surface_info, this, surface_client, needs_sync_tokens);
+    surface_map_[surface_info.id()] =
+        base::MakeUnique<Surface>(surface_info, this, surface_client,
+                                  begin_frame_source, needs_sync_tokens);
     return surface_map_[surface_info.id()].get();
   }
 
@@ -479,25 +476,21 @@
 }
 
 void SurfaceManager::SurfaceActivated(Surface* surface) {
-  if (dependency_tracker_)
-    dependency_tracker_->OnSurfaceActivated(surface);
+  dependency_tracker_.OnSurfaceActivated(surface);
 }
 
 void SurfaceManager::SurfaceDependenciesChanged(
     Surface* surface,
     const base::flat_set<SurfaceId>& added_dependencies,
     const base::flat_set<SurfaceId>& removed_dependencies) {
-  if (dependency_tracker_) {
-    dependency_tracker_->OnSurfaceDependenciesChanged(
-        surface, added_dependencies, removed_dependencies);
-  }
+  dependency_tracker_.OnSurfaceDependenciesChanged(surface, added_dependencies,
+                                                   removed_dependencies);
 }
 
 void SurfaceManager::SurfaceDiscarded(Surface* surface) {
   for (auto& observer : observer_list_)
     observer.OnSurfaceDiscarded(surface->surface_id());
-  if (dependency_tracker_)
-    dependency_tracker_->OnSurfaceDiscarded(surface);
+  dependency_tracker_.OnSurfaceDiscarded(surface);
 }
 
 void SurfaceManager::SurfaceDamageExpected(const SurfaceId& surface_id,
diff --git a/cc/surfaces/surface_manager.h b/cc/surfaces/surface_manager.h
index adc228f..a3257e2b 100644
--- a/cc/surfaces/surface_manager.h
+++ b/cc/surfaces/surface_manager.h
@@ -62,9 +62,6 @@
   std::string SurfaceReferencesToString();
 #endif
 
-  void SetDependencyTracker(SurfaceDependencyTracker* dependency_tracker);
-  SurfaceDependencyTracker* dependency_tracker() { return dependency_tracker_; }
-
   void RequestSurfaceResolution(Surface* surface,
                                 SurfaceDependencyDeadline* deadline);
 
@@ -73,6 +70,7 @@
   // dependencies are satisfied, and it is not reachable from the root surface.
   Surface* CreateSurface(base::WeakPtr<SurfaceClient> surface_client,
                          const SurfaceInfo& surface_info,
+                         BeginFrameSource* begin_frame_source,
                          bool needs_sync_tokens);
 
   // Destroy the Surface once a set of sequence numbers has been satisfied.
@@ -283,6 +281,10 @@
 
   FrameSinkManager framesink_manager_;
 
+  // SurfaceDependencyTracker needs to be destroyed after Surfaces are destroyed
+  // because they will call back into the dependency tracker.
+  SurfaceDependencyTracker dependency_tracker_;
+
   base::flat_map<SurfaceId, std::unique_ptr<Surface>> surface_map_;
   base::ObserverList<SurfaceObserver> observer_list_;
   base::ThreadChecker thread_checker_;
@@ -329,8 +331,6 @@
   std::unordered_map<FrameSinkId, std::vector<LocalSurfaceId>, FrameSinkIdHash>
       temporary_reference_ranges_;
 
-  SurfaceDependencyTracker* dependency_tracker_ = nullptr;
-
   base::WeakPtrFactory<SurfaceManager> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(SurfaceManager);
diff --git a/cc/surfaces/surface_synchronization_unittest.cc b/cc/surfaces/surface_synchronization_unittest.cc
index 78f87e8..02c35f3 100644
--- a/cc/surfaces/surface_synchronization_unittest.cc
+++ b/cc/surfaces/surface_synchronization_unittest.cc
@@ -112,10 +112,6 @@
     return surface_manager().HasTemporaryReference(surface_id);
   }
 
-  SurfaceDependencyTracker& dependency_tracker() {
-    return *surface_manager_.dependency_tracker();
-  }
-
   FakeExternalBeginFrameSource* begin_frame_source() {
     return begin_frame_source_.get();
   }
@@ -138,10 +134,7 @@
     begin_frame_source_ =
         base::MakeUnique<FakeExternalBeginFrameSource>(0.f, false);
     begin_frame_source_->SetClient(&begin_frame_source_client_);
-    dependency_tracker_ =
-        base::MakeUnique<SurfaceDependencyTracker>(&surface_manager_);
     now_src_ = base::MakeUnique<base::SimpleTestTickClock>();
-    surface_manager_.SetDependencyTracker(dependency_tracker_.get());
     surface_manager_.AddObserver(&surface_observer_);
     supports_.push_back(CompositorFrameSinkSupport::Create(
         &support_client_, &surface_manager_, kDisplayFrameSink, kIsRoot,
@@ -166,13 +159,8 @@
 
   void TearDown() override {
     surface_manager_.RemoveObserver(&surface_observer_);
-    surface_manager_.SetDependencyTracker(nullptr);
     surface_manager_.UnregisterBeginFrameSource(begin_frame_source_.get());
 
-    dependency_tracker_.reset();
-
-    // SurfaceDependencyTracker depends on this BeginFrameSource and so it must
-    // be destroyed AFTER the dependency tracker is destroyed.
     begin_frame_source_->SetClient(nullptr);
     begin_frame_source_.reset();
 
@@ -194,7 +182,6 @@
   FakeExternalBeginFrameSourceClient begin_frame_source_client_;
   std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source_;
   std::unique_ptr<base::SimpleTestTickClock> now_src_;
-  std::unique_ptr<SurfaceDependencyTracker> dependency_tracker_;
   std::vector<std::unique_ptr<CompositorFrameSinkSupport>> supports_;
 
   DISALLOW_COPY_AND_ASSIGN(SurfaceSynchronizationTest);
diff --git a/cc/surfaces/surface_unittest.cc b/cc/surfaces/surface_unittest.cc
index 5f8fe8e..297a1670 100644
--- a/cc/surfaces/surface_unittest.cc
+++ b/cc/surfaces/surface_unittest.cc
@@ -7,7 +7,6 @@
 #include "cc/output/copy_output_result.h"
 #include "cc/surfaces/compositor_frame_sink_support.h"
 #include "cc/surfaces/local_surface_id_allocator.h"
-#include "cc/surfaces/surface_dependency_tracker.h"
 #include "cc/surfaces/surface_manager.h"
 #include "cc/test/begin_frame_args_test.h"
 #include "cc/test/compositor_frame_helpers.h"
diff --git a/cc/trees/draw_property_utils.cc b/cc/trees/draw_property_utils.cc
index d9de4290f..3e8bca8 100644
--- a/cc/trees/draw_property_utils.cc
+++ b/cc/trees/draw_property_utils.cc
@@ -1008,6 +1008,7 @@
                                    property_trees->transform_tree);
   mask_layer->draw_properties().visible_layer_rect =
       gfx::Rect(mask_layer->bounds());
+  mask_layer->draw_properties().opacity = 1;
 }
 
 void ComputeSurfaceDrawProperties(PropertyTrees* property_trees,
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 4cce2ce0..f69d8fc 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -7343,6 +7343,93 @@
 
 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeTestMaskWithNonExactTextureSize);
 
+class LayerTreeTestSolidColorMaskLayer : public LayerTreeTest {
+ protected:
+  void SetupTree() override {
+    // Root
+    //  |
+    //  +-- Content Layer
+    //        +--Mask
+    scoped_refptr<Layer> root = Layer::Create();
+    scoped_refptr<FakePictureLayer> content_layer =
+        FakePictureLayer::Create(&client_);
+    root->AddChild(content_layer);
+    gfx::Size content_size(100, 100);
+    std::unique_ptr<RecordingSource> recording_source =
+        FakeRecordingSource::CreateFilledRecordingSource(content_size);
+    PaintFlags paint;
+    static_cast<FakeRecordingSource*>(recording_source.get())
+        ->add_draw_rect_with_flags(gfx::Rect(content_size), paint);
+
+    client_.set_fill_with_nonsolid_color(true);
+    static_cast<FakeRecordingSource*>(recording_source.get())->Rerecord();
+    scoped_refptr<FakePictureLayer> mask_layer =
+        FakePictureLayer::CreateWithRecordingSource(
+            &client_, std::move(recording_source));
+    content_layer->SetMaskLayer(mask_layer.get());
+    gfx::Size root_size(100, 100);
+    root->SetBounds(root_size);
+    content_layer->SetBounds(content_size);
+
+    mask_layer->SetBounds(content_size);
+    mask_layer->SetLayerMaskType(Layer::LayerMaskType::MULTI_TEXTURE_MASK);
+
+    layer_tree_host()->SetRootLayer(root);
+    LayerTreeTest::SetupTree();
+    client_.set_bounds(root->bounds());
+  }
+
+  void BeginTest() override { PostSetNeedsCommitToMainThread(); }
+
+  DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
+                                   LayerTreeHostImpl::FrameData* frame_data,
+                                   DrawResult draw_result) override {
+    EXPECT_EQ(2u, frame_data->render_passes.size());
+    RenderPass* root_pass = frame_data->render_passes.back().get();
+    EXPECT_EQ(2u, root_pass->quad_list.size());
+
+    // There's a solid color quad under everything.
+    EXPECT_EQ(DrawQuad::SOLID_COLOR, root_pass->quad_list.back()->material);
+
+    // Mask layer tiles should not be skipped even if the mask layer is solid
+    // color.
+    EXPECT_EQ(DrawQuad::RENDER_PASS, root_pass->quad_list.front()->material);
+    const RenderPassDrawQuad* render_pass_quad =
+        RenderPassDrawQuad::MaterialCast(root_pass->quad_list.front());
+    EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(),
+              render_pass_quad->rect.ToString());
+    EXPECT_EQ(gfx::RectF().ToString(),
+
+              render_pass_quad->mask_uv_rect.ToString());
+    EndTest();
+    return draw_result;
+  }
+
+  void AfterTest() override {}
+
+  FakeContentLayerClient client_;
+};
+
+class LayerTreeTestSingleTextureSolidColorMaskLayer
+    : public LayerTreeTestSolidColorMaskLayer {
+ public:
+  void InitializeSettings(LayerTreeSettings* settings) override {
+    settings->enable_mask_tiling = false;
+  }
+};
+
+SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeTestSingleTextureSolidColorMaskLayer);
+
+class LayerTreeTestMultiTextureSolidColorMaskLayer
+    : public LayerTreeTestSolidColorMaskLayer {
+ public:
+  void InitializeSettings(LayerTreeSettings* settings) override {
+    settings->enable_mask_tiling = true;
+  }
+};
+
+SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeTestMultiTextureSolidColorMaskLayer);
+
 class LayerTreeTestPageScaleFlags : public LayerTreeTest {
  protected:
   void SetupTree() override {
diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h
index 363fcdd1..7010581 100644
--- a/cc/trees/layer_tree_settings.h
+++ b/cc/trees/layer_tree_settings.h
@@ -94,7 +94,7 @@
 
   // TODO(sunxd): remove this flag when filter demoting and aa of mask layers
   // are implemented.
-  bool enable_mask_tiling = false;
+  bool enable_mask_tiling = true;
 
   // If set to true, the compositor may selectively defer image decodes to the
   // Image Decode Service and raster tiles without images until the decode is
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn
index ccd3744..7cd13b9 100644
--- a/chrome/BUILD.gn
+++ b/chrome/BUILD.gn
@@ -1767,7 +1767,6 @@
       deps += [
         "//device/gamepad",
         "//device/sensors",
-        "//ui/events/devices",
       ]
     }
   }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
index 30113479..939a3d62 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
@@ -161,6 +161,11 @@
     public static final String EXTRA_DATA_HASH_CODE = "org.chromium.chrome.browser.data_hash";
 
     /**
+     * A boolean to indicate whether incognito mode is currently selected.
+     */
+    public static final String EXTRA_INCOGNITO_MODE = "org.chromium.chrome.browser.incognito_mode";
+
+    /**
      * Fake ComponentName used in constructing TRUSTED_APPLICATION_CODE_EXTRA.
      */
     private static ComponentName sFakeComponentName;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ServiceTabLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/ServiceTabLauncher.java
index efb09f15..4e34d936 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ServiceTabLauncher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ServiceTabLauncher.java
@@ -22,7 +22,6 @@
 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
 import org.chromium.chrome.browser.tabmodel.document.AsyncTabCreationParams;
 import org.chromium.chrome.browser.tabmodel.document.TabDelegate;
-import org.chromium.chrome.browser.webapps.ChromeWebApkHost;
 import org.chromium.chrome.browser.webapps.WebappDataStorage;
 import org.chromium.chrome.browser.webapps.WebappRegistry;
 import org.chromium.content_public.browser.LoadUrlParams;
@@ -80,18 +79,16 @@
         final TabDelegate tabDelegate = new TabDelegate(incognito);
 
         // 1. Launch WebAPK if one matches the target URL.
-        if (ChromeWebApkHost.isEnabled()) {
-            String webApkPackageName =
-                    WebApkValidator.queryWebApkPackage(ContextUtils.getApplicationContext(), url);
-            if (webApkPackageName != null) {
-                Intent intent = WebApkNavigationClient.createLaunchWebApkIntent(
-                        webApkPackageName, url, true /* forceNavigation */);
-                if (intent != null) {
-                    intent.putExtra(ShortcutHelper.EXTRA_SOURCE, ShortcutSource.NOTIFICATION);
-                    ContextUtils.getApplicationContext().startActivity(intent);
-                    return;
-                }
+        String webApkPackageName =
+                WebApkValidator.queryWebApkPackage(ContextUtils.getApplicationContext(), url);
+        if (webApkPackageName != null) {
+            Intent intent = WebApkNavigationClient.createLaunchWebApkIntent(
+                    webApkPackageName, url, true /* forceNavigation */);
+            if (intent != null) {
+                intent.putExtra(ShortcutHelper.EXTRA_SOURCE, ShortcutSource.NOTIFICATION);
+                ContextUtils.getApplicationContext().startActivity(intent);
             }
+            return;
         }
 
         // 2. Launch WebappActivity if one matches the target URL and was opened recently.
@@ -103,10 +100,7 @@
         // - We did not find a WebappDataStorage corresponding to this URL.
         // OR
         // - The WebappDataStorage hasn't been opened recently enough.
-        // OR
-        // - The WebappDataStorage corresponds to a WebAPK (and WebAPKs are disabled).
-        if (storage == null || !storage.wasUsedRecently()
-                || storage.getWebApkPackageName() != null) {
+        if (storage == null || !storage.wasUsedRecently()) {
             LoadUrlParams loadUrlParams = new LoadUrlParams(url, PageTransition.LINK);
             loadUrlParams.setPostData(postData);
             loadUrlParams.setVerbatimHeaders(extraHeaders);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java
index 6c4e6ce..1dfd97b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java
@@ -37,7 +37,6 @@
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.blink_public.platform.WebDisplayMode;
 import org.chromium.chrome.R;
-import org.chromium.chrome.browser.webapps.ChromeWebApkHost;
 import org.chromium.chrome.browser.webapps.WebApkInfo;
 import org.chromium.chrome.browser.webapps.WebappActivity;
 import org.chromium.chrome.browser.webapps.WebappAuthenticator;
@@ -531,7 +530,6 @@
      */
     @CalledByNative
     private static String queryWebApkPackage(String url) {
-        if (!ChromeWebApkHost.isEnabled()) return null;
         return WebApkValidator.queryWebApkPackage(ContextUtils.getApplicationContext(), url);
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/PhoneNumberUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/PhoneNumberUtil.java
index 2f5623a..336cbb3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/PhoneNumberUtil.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/PhoneNumberUtil.java
@@ -89,7 +89,7 @@
     }
 
     /**
-     * Checks whether the given phone number matches a valid pattern according to
+     * Checks whether the given phone number is a possible number according to
      * region code.
      * The region code is from the given phone number if it starts with '+',
      * otherwise the region code is deduced from the given country code or from
@@ -98,13 +98,13 @@
      * @param phoneNumber The given phone number.
      * @param countryCode The given country code.
      *
-     * @return True if the given number is valid, otherwise return false.
+     * @return True if the given number is a possible number, otherwise return false.
      */
-    public static boolean isValidNumber(String phoneNumber, @Nullable String countryCode) {
-        return nativeIsValidNumber(phoneNumber, countryCode);
+    public static boolean isPossibleNumber(String phoneNumber, @Nullable String countryCode) {
+        return nativeIsPossibleNumber(phoneNumber, countryCode);
     }
 
     private static native String nativeFormatForDisplay(String phoneNumber, String countryCode);
     private static native String nativeFormatForResponse(String phoneNumber);
-    private static native boolean nativeIsValidNumber(String phoneNumber, String countryCode);
+    private static native boolean nativeIsPossibleNumber(String phoneNumber, String countryCode);
 }
\ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
index e045e211..72cff49 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
@@ -28,7 +28,6 @@
 import org.chromium.chrome.browser.tab.TabRedirectHandler;
 import org.chromium.chrome.browser.util.IntentUtils;
 import org.chromium.chrome.browser.util.UrlUtilities;
-import org.chromium.chrome.browser.webapps.ChromeWebApkHost;
 import org.chromium.content_public.common.ContentUrlConstants;
 import org.chromium.ui.base.PageTransition;
 
@@ -515,27 +514,24 @@
                 IntentWithGesturesHandler.getInstance().onNewIntentWithGesture(intent);
             }
 
-            if (ChromeWebApkHost.isEnabled()) {
-                // If the only specialized intent handler is a WebAPK, set the intent's package to
-                // launch the WebAPK without showing the intent picker.
-                String targetWebApkPackageName = mDelegate.findWebApkPackageName(resolvingInfos);
+            // If the only specialized intent handler is a WebAPK, set the intent's package to
+            // launch the WebAPK without showing the intent picker.
+            String targetWebApkPackageName = mDelegate.findWebApkPackageName(resolvingInfos);
 
-                // We can't rely on this falling through to startActivityIfNeeded and behaving
-                // correctly for WebAPKs. This is because the target of the intent is the WebApk's
-                // main activity but that's just a bouncer which will redirect to WebApkActivity in
-                // chrome. To avoid bouncing indefinitely, don't override the navigation if we are
-                // currently showing the WebApk |params.webApkPackageName()| that we will redirect
-                // to.
-                if (targetWebApkPackageName != null
-                        && targetWebApkPackageName.equals(params.webApkPackageName())) {
-                    if (DEBUG) Log.i(TAG, "NO_OVERRIDE: Navigation in WebApk");
-                    return OverrideUrlLoadingResult.NO_OVERRIDE;
-                }
+            // We can't rely on this falling through to startActivityIfNeeded and behaving
+            // correctly for WebAPKs. This is because the target of the intent is the WebApk's main
+            // activity but that's just a bouncer which will redirect to WebApkActivity in chrome.
+            // To avoid bouncing indefinitely, don't override the navigation if we are currently
+            // showing the WebApk |params.webApkPackageName()| that we will redirect to.
+            if (targetWebApkPackageName != null
+                    && targetWebApkPackageName.equals(params.webApkPackageName())) {
+                if (DEBUG) Log.i(TAG, "NO_OVERRIDE: Navigation in WebApk");
+                return OverrideUrlLoadingResult.NO_OVERRIDE;
+            }
 
-                if (targetWebApkPackageName != null
-                        && mDelegate.countSpecializedHandlers(resolvingInfos) == 1) {
-                    intent.setPackage(targetWebApkPackageName);
-                }
+            if (targetWebApkPackageName != null
+                    && mDelegate.countSpecializedHandlers(resolvingInfos) == 1) {
+                intent.setPackage(targetWebApkPackageName);
             }
 
             if (mDelegate.startActivityIfNeeded(intent, shouldProxyForInstantApps)) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/BrowsingHistoryBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/history/BrowsingHistoryBridge.java
index c4c5a07..ddb01462 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/BrowsingHistoryBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/BrowsingHistoryBridge.java
@@ -5,7 +5,6 @@
 package org.chromium.chrome.browser.history;
 
 import org.chromium.base.annotations.CalledByNative;
-import org.chromium.chrome.browser.profiles.Profile;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -17,8 +16,8 @@
     private boolean mRemovingItems;
     private boolean mHasPendingRemoveRequest;
 
-    public BrowsingHistoryBridge() {
-        mNativeHistoryBridge = nativeInit(Profile.getLastUsedProfile());
+    public BrowsingHistoryBridge(boolean isIncognito) {
+        mNativeHistoryBridge = nativeInit(isIncognito);
     }
 
     @Override
@@ -95,7 +94,7 @@
         }
     }
 
-    private native long nativeInit(Profile profile);
+    private native long nativeInit(boolean isIncognito);
     private native void nativeDestroy(long nativeBrowsingHistoryBridge);
     private native void nativeQueryHistory(long nativeBrowsingHistoryBridge,
             List<HistoryItem> historyItems, String query, long queryEndTime);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryActivity.java
index d17af8d..869f7048 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryActivity.java
@@ -7,7 +7,9 @@
 import android.os.Bundle;
 
 import org.chromium.base.VisibleForTesting;
+import org.chromium.chrome.browser.IntentHandler;
 import org.chromium.chrome.browser.SnackbarActivity;
+import org.chromium.chrome.browser.util.IntentUtils;
 
 /**
  * Activity for displaying the browsing history manager.
@@ -19,7 +21,9 @@
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        mHistoryManager = new HistoryManager(this, true, getSnackbarManager());
+        boolean isIncognito = IntentUtils.safeGetBooleanExtra(
+                getIntent(), IntentHandler.EXTRA_INCOGNITO_MODE, false);
+        mHistoryManager = new HistoryManager(this, true, getSnackbarManager(), isIncognito);
         setContentView(mHistoryManager.getView());
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryAdapter.java
index df14938..c64d1db 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryAdapter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryAdapter.java
@@ -388,7 +388,8 @@
      */
     boolean hasPrivacyDisclaimers() {
         boolean isSignedIn = ChromeSigninController.get().isSignedIn();
-        return isSignedIn || mHasSyncedData || mHasOtherFormsOfBrowsingData;
+        return !mHistoryManager.isIncognito()
+                && (isSignedIn || mHasSyncedData || mHasOtherFormsOfBrowsingData);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java
index c771c128..2bcf8394 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java
@@ -61,6 +61,7 @@
     private static HistoryProvider sProviderForTests;
 
     private final Activity mActivity;
+    private final boolean mIsIncognito;
     private final boolean mIsSeparateActivity;
     private final SelectableListLayout<HistoryItem> mSelectableListLayout;
     private final HistoryAdapter mHistoryAdapter;
@@ -73,27 +74,29 @@
 
     private boolean mIsSearching;
     private boolean mShouldShowInfoHeader;
-
     /**
      * Creates a new HistoryManager.
      * @param activity The Activity associated with the HistoryManager.
      * @param isSeparateActivity Whether the history UI will be shown in a separate activity than
      *                           the main Chrome activity.
      * @param snackbarManager The {@link SnackbarManager} used to display snackbars.
+     * @param isIncognito Whether the incognito tab model is currently selected.
      */
     @SuppressWarnings("unchecked") // mSelectableListLayout
-    public HistoryManager(
-            Activity activity, boolean isSeparateActivity, SnackbarManager snackbarManager) {
+    public HistoryManager(Activity activity, boolean isSeparateActivity,
+            SnackbarManager snackbarManager, boolean isIncognito) {
         mShouldShowInfoHeader =
                 ContextUtils.getAppSharedPreferences().getBoolean(PREF_SHOW_HISTORY_INFO, true);
         mActivity = activity;
         mIsSeparateActivity = isSeparateActivity;
         mSnackbarManager = snackbarManager;
+        mIsIncognito = isIncognito;
 
         mSelectionDelegate = new SelectionDelegate<>();
         mSelectionDelegate.addObserver(this);
         mHistoryAdapter = new HistoryAdapter(mSelectionDelegate, this,
-                sProviderForTests != null ? sProviderForTests : new BrowsingHistoryBridge());
+                sProviderForTests != null ? sProviderForTests
+                                          : new BrowsingHistoryBridge(isIncognito));
 
         // 1. Create SelectableListLayout.
         mSelectableListLayout =
@@ -272,6 +275,13 @@
                 getOpenUrlIntent(url, isIncognito, createNewTab));
     }
 
+    /**
+     * @return Whether the HistoryManager is displaying history for the incognito profile.
+     */
+    public boolean isIncognito() {
+        return mIsIncognito;
+    }
+
     @VisibleForTesting
     Intent getOpenUrlIntent(String url, Boolean isIncognito, boolean createNewTab) {
         // Construct basic intent.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManagerUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManagerUtils.java
index 46f7f4f..f944f5a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManagerUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManagerUtils.java
@@ -39,6 +39,8 @@
             Intent intent = new Intent();
             intent.setClass(appContext, HistoryActivity.class);
             intent.putExtra(IntentHandler.EXTRA_PARENT_COMPONENT, activity.getComponentName());
+            intent.putExtra(IntentHandler.EXTRA_INCOGNITO_MODE,
+                    activity.getTabModelSelector().isIncognitoSelected());
             activity.startActivity(intent);
         }
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java
index 9742794a..2fe225b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java
@@ -7,6 +7,7 @@
 import android.app.Activity;
 import android.view.View;
 
+import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.BasicNativePage;
 import org.chromium.chrome.browser.NativePageHost;
@@ -19,6 +20,7 @@
 public class HistoryPage extends BasicNativePage {
     private HistoryManager mHistoryManager;
     private String mTitle;
+    private int mThemeColor;
 
     /**
      * Create a new instance of the history page.
@@ -28,12 +30,16 @@
      */
     public HistoryPage(Activity activity, NativePageHost host) {
         super(activity, host);
+
+        mThemeColor = !host.isIncognito() ? super.getThemeColor()
+                                          : ApiCompatibilityUtils.getColor(activity.getResources(),
+                                                    R.color.incognito_primary_color);
     }
 
     @Override
     protected void initialize(Activity activity, final NativePageHost host) {
-        mHistoryManager = new HistoryManager(
-                activity, false, ((SnackbarManageable) activity).getSnackbarManager());
+        mHistoryManager = new HistoryManager(activity, false,
+                ((SnackbarManageable) activity).getSnackbarManager(), host.isIncognito());
         mTitle = activity.getString(R.string.menu_history);
     }
 
@@ -58,4 +64,9 @@
         mHistoryManager = null;
         super.destroy();
     }
+
+    @Override
+    public int getThemeColor() {
+        return mThemeColor;
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistorySheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistorySheetContent.java
index 6f2d465a..e96940c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistorySheetContent.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistorySheetContent.java
@@ -27,7 +27,8 @@
      * @param snackbarManager The {@link SnackbarManager} used to display snackbars.
      */
     public HistorySheetContent(final ChromeActivity activity, SnackbarManager snackbarManager) {
-        mHistoryManager = new HistoryManager(activity, false, snackbarManager);
+        mHistoryManager = new HistoryManager(activity, false, snackbarManager,
+                activity.getTabModelSelector().isIncognitoSelected());
         mContentView = mHistoryManager.getView();
         mToolbarView = mHistoryManager.detachToolbarView();
         mToolbarView.addObserver(new SelectableListToolbar.SelectableListToolbarObserver() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java
index c0e7637..7eceb301 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java
@@ -182,6 +182,17 @@
                 (LinearLayout) LayoutInflater.from(getContext())
                         .inflate(R.layout.infobar_translate_compact_content, parent, false);
 
+        // When parent tab is being switched out (view detached), dismiss all menus and snackbars.
+        content.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
+            @Override
+            public void onViewAttachedToWindow(View view) {}
+
+            @Override
+            public void onViewDetachedFromWindow(View view) {
+                dismissMenusAndSnackbars();
+            }
+        });
+
         mTabLayout = (TranslateTabLayout) content.findViewById(R.id.translate_infobar_tabs);
         mTabLayout.addTabs(mOptions.sourceLanguageName(), mOptions.targetLanguageName());
 
@@ -440,14 +451,19 @@
         if (mLanguageMenuHelper != null) mLanguageMenuHelper.dismiss();
     }
 
-    @Override
-    protected void onStartedHiding() {
+    // Dismiss all overflow menus and snackbars that belong to this infobar and remain open.
+    private void dismissMenusAndSnackbars() {
         dismissMenus();
         if (getSnackbarManager() != null && mSnackbarController != null) {
             getSnackbarManager().dismissSnackbars(mSnackbarController);
         }
     }
 
+    @Override
+    protected void onStartedHiding() {
+        dismissMenusAndSnackbars();
+    }
+
     /**
      * Returns true if overflow menu is showing.  This is only used for automation testing.
      */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
index 6feb385e..8ce75fd8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
@@ -69,7 +69,6 @@
 import org.chromium.chrome.browser.services.GoogleServicesManager;
 import org.chromium.chrome.browser.share.ShareHelper;
 import org.chromium.chrome.browser.sync.SyncController;
-import org.chromium.chrome.browser.webapps.ChromeWebApkHost;
 import org.chromium.chrome.browser.webapps.WebApkVersionManager;
 import org.chromium.chrome.browser.webapps.WebappRegistry;
 import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerFactory;
@@ -455,9 +454,7 @@
                     // Initialize whether or not precaching is enabled.
                     PrecacheLauncher.updatePrecachingEnabled(context);
 
-                    if (ChromeWebApkHost.isEnabled()) {
-                        WebApkVersionManager.updateWebApksIfNeeded();
-                    }
+                    WebApkVersionManager.updateWebApksIfNeeded();
 
                     removeSnapshotDatabase(context);
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java
index c0aa956df..681dc1f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java
@@ -40,7 +40,6 @@
 import org.chromium.chrome.browser.preferences.website.SingleCategoryPreferences;
 import org.chromium.chrome.browser.preferences.website.SingleWebsitePreferences;
 import org.chromium.chrome.browser.preferences.website.SiteSettingsCategory;
-import org.chromium.chrome.browser.webapps.ChromeWebApkHost;
 import org.chromium.components.url_formatter.UrlFormatter;
 import org.chromium.webapk.lib.client.WebApkValidator;
 
@@ -155,8 +154,6 @@
      */
     @CalledByNative
     private String queryWebApkPackage(String url) {
-        if (!ChromeWebApkHost.isEnabled()) return "";
-
         String webApkPackage =
                 WebApkValidator.queryWebApkPackage(ContextUtils.getApplicationContext(), url);
         return webApkPackage == null ? "" : webApkPackage;
@@ -191,13 +188,10 @@
         Log.i(TAG, "Dispatching notification event to native: " + notificationId);
 
         if (NotificationConstants.ACTION_CLICK_NOTIFICATION.equals(intent.getAction())) {
-            String webApkPackage = "";
-            if (ChromeWebApkHost.isEnabled()) {
-                webApkPackage = intent.getStringExtra(
+            String webApkPackage = intent.getStringExtra(
                     NotificationConstants.EXTRA_NOTIFICATION_INFO_WEBAPK_PACKAGE);
-                if (webApkPackage == null) {
-                    webApkPackage = "";
-                }
+            if (webApkPackage == null) {
+                webApkPackage = "";
             }
             int actionIndex = intent.getIntExtra(
                     NotificationConstants.EXTRA_NOTIFICATION_INFO_ACTION_INDEX, -1);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java
index 2e0681b..70da6ed2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java
@@ -429,7 +429,12 @@
 
         @Override
         public boolean isValid(@Nullable CharSequence value) {
-            return value != null && PhoneNumberUtil.isValidNumber(value.toString(), mCountryCode);
+            // TODO(gogerald): Warn users when the phone number is a possible number but may be
+            // invalid, crbug.com/736387.
+            // Note that isPossibleNumber is used since the metadata in libphonenumber has to be
+            // updated frequently (daily) to do more strict validation.
+            return value != null
+                    && PhoneNumberUtil.isPossibleNumber(value.toString(), mCountryCode);
         }
 
         @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeWebApkHost.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeWebApkHost.java
index 3cb43b09..77270c0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeWebApkHost.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeWebApkHost.java
@@ -27,23 +27,17 @@
     /** Whether installing WebAPks from Google Play is possible. */
     private static Integer sGooglePlayInstallState;
 
-    private static Boolean sEnabledForTesting;
+    private static Boolean sInstallsEnabledForTesting;
 
     public static void init() {
         WebApkValidator.init(
                 ChromeWebApkHostSignature.EXPECTED_SIGNATURE, ChromeWebApkHostSignature.PUBLIC_KEY);
     }
 
-    public static void initForTesting(boolean enabled) {
-        sEnabledForTesting = enabled;
-        sGooglePlayInstallState = enabled ? GooglePlayInstallState.SUPPORTED
-                                          : GooglePlayInstallState.NO_PLAY_SERVICES;
-    }
-
-    public static boolean isEnabled() {
-        if (sEnabledForTesting != null) return sEnabledForTesting;
-
-        return isEnabledInPrefs();
+    public static void initForTesting(boolean installsEnabled) {
+        sInstallsEnabledForTesting = installsEnabled;
+        sGooglePlayInstallState = installsEnabled ? GooglePlayInstallState.SUPPORTED
+                                                  : GooglePlayInstallState.NO_PLAY_SERVICES;
     }
 
     /** Computes the GooglePlayInstallState. */
@@ -66,7 +60,10 @@
     /** Returns whether installing WebAPKs is possible. */
     @CalledByNative
     private static boolean canInstallWebApk() {
-        return isEnabled() && getGooglePlayInstallState() == GooglePlayInstallState.SUPPORTED;
+        if (sInstallsEnabledForTesting != null) return sInstallsEnabledForTesting;
+
+        return isEnabledInPrefs()
+                && getGooglePlayInstallState() == GooglePlayInstallState.SUPPORTED;
     }
 
     @CalledByNative
@@ -79,8 +76,7 @@
 
     /* Returns whether launching renderer in WebAPK process is enabled by Chrome. */
     public static boolean canLaunchRendererInWebApkProcess() {
-        return isEnabled() && LibraryLoader.isInitialized()
-                && nativeCanLaunchRendererInWebApkProcess();
+        return LibraryLoader.isInitialized() && nativeCanLaunchRendererInWebApkProcess();
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappLauncherActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappLauncherActivity.java
index 7089239b..d9a8642 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappLauncherActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappLauncherActivity.java
@@ -242,8 +242,6 @@
      * @return true iff all validation criteria are met.
      */
     private boolean isValidWebApk(Intent intent) {
-        if (!ChromeWebApkHost.isEnabled()) return false;
-
         String webApkPackage =
                 IntentUtils.safeGetStringExtra(intent, WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME);
         if (TextUtils.isEmpty(webApkPackage)) return false;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/NumberRollView.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/NumberRollView.java
index b5e4140..4079f771 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/NumberRollView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/NumberRollView.java
@@ -26,7 +26,7 @@
     private TextView mDownNumber;
     private float mNumber;
     private Animator mLastRollAnimator;
-    private int mContentDescriptionStringId;
+    private int mStringId;
 
     /**
      * A Property wrapper around the <code>number</code> functionality handled by the
@@ -83,11 +83,11 @@
     }
 
     /**
-     * @param pluralStringId The id of the string to use for the content description. The string
-     *                       must be a plural that has one placeholder for a quantity.
+     * @param stringId The id of the string to use for the description. The string must be a plural
+     *                 that has one placeholder for a quantity.
      */
-    public void setContentDescriptionString(int pluralStringId) {
-        mContentDescriptionStringId = pluralStringId;
+    public void setString(int stringId) {
+        mStringId = stringId;
     }
 
     /**
@@ -106,22 +106,23 @@
         int upNumber = downNumber + 1;
 
         NumberFormat numberFormatter = NumberFormat.getIntegerInstance();
-        String newString = numberFormatter.format(upNumber);
+        String newString;
+        if (mStringId != 0) {
+            newString = getResources().getQuantityString(mStringId, upNumber, upNumber);
+        } else {
+            newString = numberFormatter.format(upNumber);
+        }
         if (!newString.equals(mUpNumber.getText().toString())) {
             mUpNumber.setText(newString);
-            if (mContentDescriptionStringId != 0) {
-                mUpNumber.setContentDescription(getResources().getQuantityString(
-                        mContentDescriptionStringId, upNumber, upNumber));
-            }
         }
 
-        newString = numberFormatter.format(downNumber);
+        if (mStringId != 0) {
+            newString = getResources().getQuantityString(mStringId, downNumber, downNumber);
+        } else {
+            newString = numberFormatter.format(downNumber);
+        }
         if (!newString.equals(mDownNumber.getText().toString())) {
             mDownNumber.setText(newString);
-            if (mContentDescriptionStringId != 0) {
-                mDownNumber.setContentDescription(getResources().getQuantityString(
-                        mContentDescriptionStringId, downNumber, downNumber));
-            }
         }
 
         float offset = number % 1.0f;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
index 042d3ec8..3dd7ed9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
@@ -1095,7 +1095,7 @@
     private void setSheetOffsetFromBottom(float offset) {
         if (MathUtils.areFloatsEqual(offset, getSheetOffsetFromBottom())) return;
 
-        if (offset > getMinOffset()) {
+        if (offset > getMinOffset() && !MathUtils.areFloatsEqual(offset, getMinOffset())) {
             onSheetOpened();
         } else {
             onSheetClosed();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListToolbar.java
index a0ea625..df0b288 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListToolbar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListToolbar.java
@@ -261,7 +261,7 @@
 
         LayoutInflater.from(getContext()).inflate(R.layout.number_roll_view, this);
         mNumberRollView = (NumberRollView) findViewById(R.id.selection_mode_number);
-        mNumberRollView.setContentDescriptionString(R.plurals.accessibility_selected_items);
+        mNumberRollView.setString(R.plurals.accessibility_selected_items);
 
         mOriginalContentInsetStart = getContentInsetStart();
         mOriginalContentInsetEnd = getContentInsetEnd();
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
index 70e4e9ca..4f73732 100644
--- a/chrome/android/java/strings/android_chrome_strings.grd
+++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -2688,8 +2688,8 @@
       </message>
       <message name="IDS_ACCESSIBILITY_SELECTED_ITEMS" desc="Content description for a number indicating how many items are selected. [ICU Syntax]">
         {NUM_SELECTED, plural,
-          =1 {1 item selected}
-          other {# items selected}}
+          =1 {1 selected}
+          other {# selected}}
       </message>
       <message name="IDS_ACCESSIBILITY_SHARE_SELECTED_ITEMS" desc="Content description for the button to share selected items. [ICU Syntax]">
         {NUM_SELECTED, plural,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/PersonalDataManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/PersonalDataManagerTest.java
index 137cc72..0f73273 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/PersonalDataManagerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/PersonalDataManagerTest.java
@@ -14,6 +14,7 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.test.BaseJUnit4ClassRunner;
+import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.RetryOnFailure;
 import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
@@ -120,9 +121,12 @@
     }
 
     @Test
+    /*
     @SmallTest
     @Feature({"Autofill"})
     @RetryOnFailure
+    */
+    @DisabledTest(message = "crbug.com/739575")
     public void testAddAndDeleteProfile()
             throws InterruptedException, ExecutionException, TimeoutException {
         String profileOneGUID = mHelper.setProfile(createTestProfile());
@@ -257,8 +261,11 @@
     }
 
     @Test
+    /*
     @SmallTest
     @Feature({"Autofill"})
+    */
+    @DisabledTest(message = "crbug.com/739575")
     public void testLabels() throws InterruptedException, ExecutionException, TimeoutException {
         AutofillProfile profile1 = new AutofillProfile(
                  "" /* guid */, "https://www.example.com" /* origin */,
@@ -310,8 +317,11 @@
     }
 
     @Test
+    /*
     @SmallTest
     @Feature({"Autofill"})
+    */
+    @DisabledTest(message = "crbug.com/739575")
     public void testProfilesFrecency()
             throws InterruptedException, ExecutionException, TimeoutException {
         // Create 3 profiles.
@@ -437,9 +447,12 @@
     }
 
     @Test
+    /*
     @SmallTest
     @Feature({"Autofill"})
     @RetryOnFailure
+    */
+    @DisabledTest(message = "crbug.com/739575")
     public void testCreditCardUseStatsSettingAndGetting()
             throws InterruptedException, ExecutionException, TimeoutException {
         String guid = mHelper.setCreditCard(
@@ -487,9 +500,12 @@
     }
 
     @Test
+    /*
     @SmallTest
     @Feature({"Autofill"})
     @RetryOnFailure
+    */
+    @DisabledTest(message = "crbug.com/739575")
     public void testRecordAndLogCreditCardUse()
             throws InterruptedException, ExecutionException, TimeoutException {
         String guid = mHelper.setCreditCard(
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
index b449631..92d4c3b 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
@@ -2933,7 +2933,7 @@
         ThreadUtils.runOnUiThreadBlocking(new Runnable() {
             @Override
             public void run() {
-                BrowsingHistoryBridge historyService = new BrowsingHistoryBridge();
+                BrowsingHistoryBridge historyService = new BrowsingHistoryBridge(false);
                 historyService.setObserver(historyObserver);
                 String historyQueryFilter = "";
                 int historyQueryTimeout = 0;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java
index 49114fc..b6e6a37 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java
@@ -35,7 +35,6 @@
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabRedirectHandler;
 import org.chromium.chrome.browser.test.ChromeBrowserTestRule;
-import org.chromium.chrome.browser.webapps.ChromeWebApkHost;
 import org.chromium.ui.base.PageTransition;
 import org.chromium.webapk.lib.common.WebApkConstants;
 
@@ -126,7 +125,6 @@
     @Before
     public void setUp() {
         mDelegate.mQueryIntentOverride = null;
-        ChromeWebApkHost.initForTesting(false);  // disabled by default
         RecordHistogram.setDisabledForTests(true);
     }
 
@@ -1196,25 +1194,12 @@
     }
 
     /**
-     * Test that tapping a link which falls solely into the scope of a WebAPK does not bypass the
-     * intent picker if WebAPKs are not enabled.
-     */
-    @Test
-    @SmallTest
-    public void testLaunchWebApk_WebApkNotEnabled() {
-        checkUrl(WEBAPK_SCOPE)
-                .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT,
-                        START_OTHER_ACTIVITY);
-    }
-
-    /**
      * Test that tapping a link which falls solely in the scope of a WebAPK launches a WebAPK
      * without showing the intent picker if WebAPKs are enabled.
      */
     @Test
     @SmallTest
     public void testLaunchWebApk_BypassIntentPicker() {
-        ChromeWebApkHost.initForTesting(true);
         checkUrl(WEBAPK_SCOPE)
                 .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT, START_WEBAPK);
     }
@@ -1226,7 +1211,6 @@
     @Test
     @SmallTest
     public void testLaunchWebApk_ShowIntentPickerMultipleIntentHandlers() {
-        ChromeWebApkHost.initForTesting(true);
         checkUrl(WEBAPK_WITH_NATIVE_APP_SCOPE)
                 .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT,
                         START_OTHER_ACTIVITY);
@@ -1239,7 +1223,6 @@
     @Test
     @SmallTest
     public void testLaunchWebApk_BypassIntentPickerFromAnotherWebApk() {
-        ChromeWebApkHost.initForTesting(true);
         checkUrl(WEBAPK_SCOPE)
                 .withReferrer(WEBAPK_WITH_NATIVE_APP_SCOPE)
                 .withWebApkPackageName(WEBAPK_WITH_NATIVE_APP_PACKAGE_NAME)
@@ -1254,7 +1237,6 @@
     @Test
     @SmallTest
     public void testLaunchWebApk_ShowIntentPickerInvalidWebApk() {
-        ChromeWebApkHost.initForTesting(true);
         checkUrl(COUNTERFEIT_WEBAPK_SCOPE)
                 .expecting(OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT,
                         START_OTHER_ACTIVITY);
@@ -1267,7 +1249,6 @@
     @Test
     @SmallTest
     public void testLaunchWebApk_StayInSameWebApk() {
-        ChromeWebApkHost.initForTesting(true);
         checkUrl(WEBAPK_SCOPE + "/new.html")
                 .withWebApkPackageName(WEBAPK_PACKAGE_NAME)
                 .expecting(OverrideUrlLoadingResult.NO_OVERRIDE, IGNORE);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
index b3717f5..1fe094e2 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
@@ -336,7 +336,6 @@
     public void setUp() {
         ContextUtils.initApplicationContextForTests(RuntimeEnvironment.application);
         CommandLine.init(null);
-        ChromeWebApkHost.initForTesting(true);
 
         registerWebApk(WEBAPK_PACKAGE_NAME, defaultManifestData(), CURRENT_SHELL_APK_VERSION);
         mClock = new MockClock();
diff --git a/chrome/app/chrome_main.cc b/chrome/app/chrome_main.cc
index 52b2f96..ac8075b 100644
--- a/chrome/app/chrome_main.cc
+++ b/chrome/app/chrome_main.cc
@@ -122,7 +122,8 @@
   if (command_line->GetSwitchValueASCII(switches::kProcessType) ==
       switches::kProfiling)
     return profiling::ProfilingMain(*command_line);
-  profiling::InitMemlogSenderIfNecessary(*command_line);
+  if (command_line->HasSwitch(switches::kProcessType))
+    profiling::InitMemlogSenderIfNecessary(*command_line);
 #endif  // ENABLE_OOP_HEAP_PROFILING
 
 #if defined(OS_CHROMEOS) && BUILDFLAG(ENABLE_PACKAGE_MASH_SERVICES)
diff --git a/chrome/browser/after_startup_task_utils_unittest.cc b/chrome/browser/after_startup_task_utils_unittest.cc
index 53308cc..ff0a88a5 100644
--- a/chrome/browser/after_startup_task_utils_unittest.cc
+++ b/chrome/browser/after_startup_task_utils_unittest.cc
@@ -10,25 +10,19 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/task_runner_util.h"
-#include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
+#include "base/task_scheduler/post_task.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using base::RunLoop;
-using content::BrowserThread;
-using content::TestBrowserThreadBundle;
-
 namespace {
 
 class WrappedTaskRunner : public base::TaskRunner {
  public:
-  explicit WrappedTaskRunner(const scoped_refptr<TaskRunner>& real_runner)
-      : real_task_runner_(real_runner) {}
+  explicit WrappedTaskRunner(scoped_refptr<TaskRunner> real_runner)
+      : real_task_runner_(std::move(real_runner)) {}
 
   bool PostDelayedTask(const tracked_objects::Location& from_here,
                        base::OnceClosure task,
@@ -73,21 +67,21 @@
 
 class AfterStartupTaskTest : public testing::Test {
  public:
-  AfterStartupTaskTest()
-      : browser_thread_bundle_(TestBrowserThreadBundle::REAL_DB_THREAD) {
-    ui_thread_ = new WrappedTaskRunner(
-        BrowserThread::GetTaskRunnerForThread(BrowserThread::UI));
-    db_thread_ = new WrappedTaskRunner(
-        BrowserThread::GetTaskRunnerForThread(BrowserThread::DB));
+  AfterStartupTaskTest() {
+    ui_thread_ = base::MakeRefCounted<WrappedTaskRunner>(
+        content::BrowserThread::GetTaskRunnerForThread(
+            content::BrowserThread::UI));
+    background_sequence_ = base::MakeRefCounted<WrappedTaskRunner>(
+        base::CreateSequencedTaskRunnerWithTraits(base::TaskTraits()));
     AfterStartupTaskUtils::UnsafeResetForTesting();
   }
 
-  // Hop to the db thread and call IsBrowserStartupComplete.
-  bool GetIsBrowserStartupCompleteFromDBThread() {
-    RunLoop run_loop;
+  // Hop to the background sequence and call IsBrowserStartupComplete.
+  bool GetIsBrowserStartupCompleteFromBackgroundSequence() {
+    base::RunLoop run_loop;
     bool is_complete;
     base::PostTaskAndReplyWithResult(
-        db_thread_->real_runner(), FROM_HERE,
+        background_sequence_->real_runner(), FROM_HERE,
         base::Bind(&AfterStartupTaskUtils::IsBrowserStartupComplete),
         base::Bind(&AfterStartupTaskTest::GotIsOnBrowserStartupComplete,
                    &run_loop, &is_complete));
@@ -95,58 +89,58 @@
     return is_complete;
   }
 
-  // Hop to the db thread and call PostAfterStartupTask.
-  void PostAfterStartupTaskFromDBThread(
+  // Hop to the background sequence and call PostAfterStartupTask.
+  void PostAfterStartupTaskFromBackgroundSequence(
       const tracked_objects::Location& from_here,
-      const scoped_refptr<base::TaskRunner>& task_runner,
+      scoped_refptr<base::TaskRunner> task_runner,
       base::OnceClosure task) {
-    RunLoop run_loop;
-    db_thread_->real_runner()->PostTaskAndReply(
+    base::RunLoop run_loop;
+    background_sequence_->real_runner()->PostTaskAndReply(
         FROM_HERE,
-        base::BindOnce(&AfterStartupTaskUtils::PostTask, from_here, task_runner,
-                       std::move(task)),
-        base::BindOnce(&RunLoop::Quit, base::Unretained(&run_loop)));
+        base::BindOnce(&AfterStartupTaskUtils::PostTask, from_here,
+                       std::move(task_runner), std::move(task)),
+        base::BindOnce(&base::RunLoop::Quit, base::Unretained(&run_loop)));
     run_loop.Run();
   }
 
-  // Make sure all tasks posted to the DB thread get run.
-  void FlushDBThread() {
-    RunLoop run_loop;
-    db_thread_->real_runner()->PostTaskAndReply(
+  // Make sure all tasks posted to the background sequence get run.
+  void FlushBackgroundSequence() {
+    base::RunLoop run_loop;
+    background_sequence_->real_runner()->PostTaskAndReply(
         FROM_HERE, base::BindOnce(&base::DoNothing),
-        base::BindOnce(&RunLoop::Quit, base::Unretained(&run_loop)));
+        base::BindOnce(&base::RunLoop::Quit, base::Unretained(&run_loop)));
     run_loop.Run();
   }
 
-  static void VerifyExpectedThread(BrowserThread::ID id) {
-    EXPECT_TRUE(BrowserThread::CurrentlyOn(id));
+  static void VerifyExpectedSequence(base::TaskRunner* task_runner) {
+    EXPECT_TRUE(task_runner->RunsTasksInCurrentSequence());
   }
 
  protected:
   scoped_refptr<WrappedTaskRunner> ui_thread_;
-  scoped_refptr<WrappedTaskRunner> db_thread_;
+  scoped_refptr<WrappedTaskRunner> background_sequence_;
 
  private:
-  static void GotIsOnBrowserStartupComplete(RunLoop* loop,
+  static void GotIsOnBrowserStartupComplete(base::RunLoop* loop,
                                             bool* out,
                                             bool is_complete) {
     *out = is_complete;
     loop->Quit();
   }
 
-  TestBrowserThreadBundle browser_thread_bundle_;
+  content::TestBrowserThreadBundle browser_thread_bundle_;
 };
 
 TEST_F(AfterStartupTaskTest, IsStartupComplete) {
-  // Check IsBrowserStartupComplete on a background thread first to
-  // verify that it does not allocate the underlying flag on that thread.
-  // That allocation thread correctness part of this test relies on
+  // Check IsBrowserStartupComplete on a background sequence first to
+  // verify that it does not allocate the underlying flag on that sequence.
+  // That allocation sequence correctness part of this test relies on
   // the DCHECK in CancellationFlag::Set().
-  EXPECT_FALSE(GetIsBrowserStartupCompleteFromDBThread());
+  EXPECT_FALSE(GetIsBrowserStartupCompleteFromBackgroundSequence());
   EXPECT_FALSE(AfterStartupTaskUtils::IsBrowserStartupComplete());
   AfterStartupTaskUtils::SetBrowserStartupIsCompleteForTesting();
   EXPECT_TRUE(AfterStartupTaskUtils::IsBrowserStartupComplete());
-  EXPECT_TRUE(GetIsBrowserStartupCompleteFromDBThread());
+  EXPECT_TRUE(GetIsBrowserStartupCompleteFromBackgroundSequence());
 }
 
 TEST_F(AfterStartupTaskTest, PostTask) {
@@ -154,77 +148,79 @@
   EXPECT_FALSE(AfterStartupTaskUtils::IsBrowserStartupComplete());
   AfterStartupTaskUtils::PostTask(
       FROM_HERE, ui_thread_,
-      base::BindOnce(&AfterStartupTaskTest::VerifyExpectedThread,
-                     BrowserThread::UI));
+      base::BindOnce(&AfterStartupTaskTest::VerifyExpectedSequence,
+                     base::RetainedRef(ui_thread_)));
   AfterStartupTaskUtils::PostTask(
-      FROM_HERE, db_thread_,
-      base::BindOnce(&AfterStartupTaskTest::VerifyExpectedThread,
-                     BrowserThread::DB));
-  PostAfterStartupTaskFromDBThread(
+      FROM_HERE, background_sequence_,
+      base::BindOnce(&AfterStartupTaskTest::VerifyExpectedSequence,
+                     base::RetainedRef(background_sequence_)));
+  PostAfterStartupTaskFromBackgroundSequence(
       FROM_HERE, ui_thread_,
-      base::BindOnce(&AfterStartupTaskTest::VerifyExpectedThread,
-                     BrowserThread::UI));
-  PostAfterStartupTaskFromDBThread(
-      FROM_HERE, db_thread_,
-      base::BindOnce(&AfterStartupTaskTest::VerifyExpectedThread,
-                     BrowserThread::DB));
-  RunLoop().RunUntilIdle();
-  EXPECT_EQ(0, db_thread_->total_task_count() + ui_thread_->total_task_count());
+      base::BindOnce(&AfterStartupTaskTest::VerifyExpectedSequence,
+                     base::RetainedRef(ui_thread_)));
+  PostAfterStartupTaskFromBackgroundSequence(
+      FROM_HERE, background_sequence_,
+      base::BindOnce(&AfterStartupTaskTest::VerifyExpectedSequence,
+                     base::RetainedRef(background_sequence_)));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0, background_sequence_->total_task_count() +
+                   ui_thread_->total_task_count());
 
   // Queued tasks should be posted upon setting the flag.
   AfterStartupTaskUtils::SetBrowserStartupIsCompleteForTesting();
-  EXPECT_EQ(2, db_thread_->posted_task_count());
+  EXPECT_EQ(2, background_sequence_->posted_task_count());
   EXPECT_EQ(2, ui_thread_->posted_task_count());
-  FlushDBThread();
-  RunLoop().RunUntilIdle();
-  EXPECT_EQ(2, db_thread_->ran_task_count());
+  FlushBackgroundSequence();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(2, background_sequence_->ran_task_count());
   EXPECT_EQ(2, ui_thread_->ran_task_count());
 
-  db_thread_->reset_task_counts();
+  background_sequence_->reset_task_counts();
   ui_thread_->reset_task_counts();
-  EXPECT_EQ(0, db_thread_->total_task_count() + ui_thread_->total_task_count());
+  EXPECT_EQ(0, background_sequence_->total_task_count() +
+                   ui_thread_->total_task_count());
 
   // Tasks posted after startup should get posted immediately.
   AfterStartupTaskUtils::PostTask(FROM_HERE, ui_thread_,
                                   base::BindOnce(&base::DoNothing));
-  AfterStartupTaskUtils::PostTask(FROM_HERE, db_thread_,
+  AfterStartupTaskUtils::PostTask(FROM_HERE, background_sequence_,
                                   base::BindOnce(&base::DoNothing));
-  EXPECT_EQ(1, db_thread_->posted_task_count());
+  EXPECT_EQ(1, background_sequence_->posted_task_count());
   EXPECT_EQ(1, ui_thread_->posted_task_count());
-  PostAfterStartupTaskFromDBThread(FROM_HERE, ui_thread_,
-                                   base::BindOnce(&base::DoNothing));
-  PostAfterStartupTaskFromDBThread(FROM_HERE, db_thread_,
-                                   base::BindOnce(&base::DoNothing));
-  EXPECT_EQ(2, db_thread_->posted_task_count());
+  PostAfterStartupTaskFromBackgroundSequence(FROM_HERE, ui_thread_,
+                                             base::BindOnce(&base::DoNothing));
+  PostAfterStartupTaskFromBackgroundSequence(FROM_HERE, background_sequence_,
+                                             base::BindOnce(&base::DoNothing));
+  EXPECT_EQ(2, background_sequence_->posted_task_count());
   EXPECT_EQ(2, ui_thread_->posted_task_count());
-  FlushDBThread();
-  RunLoop().RunUntilIdle();
-  EXPECT_EQ(2, db_thread_->ran_task_count());
+  FlushBackgroundSequence();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(2, background_sequence_->ran_task_count());
   EXPECT_EQ(2, ui_thread_->ran_task_count());
 }
 
-// Verify that posting to an AfterStartupTaskUtils::Runner bound to |db_thread_|
-// results in the same behavior as posting via
-// AfterStartupTaskUtils::PostTask(..., db_thread_, ...).
+// Verify that posting to an AfterStartupTaskUtils::Runner bound to
+// |background_sequence_| results in the same behavior as posting via
+// AfterStartupTaskUtils::PostTask(..., background_sequence_, ...).
 TEST_F(AfterStartupTaskTest, AfterStartupTaskUtilsRunner) {
   scoped_refptr<base::TaskRunner> after_startup_runner =
-      make_scoped_refptr(new AfterStartupTaskUtils::Runner(db_thread_));
+      base::MakeRefCounted<AfterStartupTaskUtils::Runner>(background_sequence_);
 
   EXPECT_FALSE(AfterStartupTaskUtils::IsBrowserStartupComplete());
   after_startup_runner->PostTask(
-      FROM_HERE, base::BindOnce(&AfterStartupTaskTest::VerifyExpectedThread,
-                                BrowserThread::DB));
+      FROM_HERE, base::BindOnce(&AfterStartupTaskTest::VerifyExpectedSequence,
+                                base::RetainedRef(background_sequence_)));
 
-  RunLoop().RunUntilIdle();
+  base::RunLoop().RunUntilIdle();
   EXPECT_FALSE(AfterStartupTaskUtils::IsBrowserStartupComplete());
-  EXPECT_EQ(0, db_thread_->total_task_count());
+  EXPECT_EQ(0, background_sequence_->total_task_count());
 
   AfterStartupTaskUtils::SetBrowserStartupIsCompleteForTesting();
-  EXPECT_EQ(1, db_thread_->posted_task_count());
+  EXPECT_EQ(1, background_sequence_->posted_task_count());
 
-  FlushDBThread();
-  RunLoop().RunUntilIdle();
-  EXPECT_EQ(1, db_thread_->ran_task_count());
+  FlushBackgroundSequence();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(1, background_sequence_->ran_task_count());
 
   EXPECT_EQ(0, ui_thread_->total_task_count());
 }
diff --git a/chrome/browser/android/banners/app_banner_infobar_delegate_android.cc b/chrome/browser/android/banners/app_banner_infobar_delegate_android.cc
index 796faab0..797b9b7 100644
--- a/chrome/browser/android/banners/app_banner_infobar_delegate_android.cc
+++ b/chrome/browser/android/banners/app_banner_infobar_delegate_android.cc
@@ -44,7 +44,6 @@
     std::unique_ptr<ShortcutInfo> shortcut_info,
     const SkBitmap& primary_icon,
     const SkBitmap& badge_icon,
-    int event_request_id,
     bool is_webapk,
     webapk::InstallSource webapk_install_source) {
   DCHECK(shortcut_info);
@@ -55,7 +54,7 @@
   auto infobar_delegate =
       base::WrapUnique(new banners::AppBannerInfoBarDelegateAndroid(
           weak_manager, std::move(shortcut_info), primary_icon, badge_icon,
-          event_request_id, is_webapk, webapk_install_source));
+          is_webapk, webapk_install_source));
   auto* raw_delegate = infobar_delegate.get();
   auto infobar = base::MakeUnique<AppBannerInfoBarAndroid>(
       std::move(infobar_delegate), url, is_webapk);
@@ -84,11 +83,9 @@
     const base::android::ScopedJavaGlobalRef<jobject>& native_app_data,
     const SkBitmap& icon,
     const std::string& native_app_package,
-    const std::string& referrer,
-    int event_request_id) {
+    const std::string& referrer) {
   auto infobar_delegate = base::WrapUnique(new AppBannerInfoBarDelegateAndroid(
-      app_title, native_app_data, icon, native_app_package, referrer,
-      event_request_id));
+      app_title, native_app_data, icon, native_app_package, referrer));
   return InfoBarService::FromWebContents(web_contents)
       ->AddInfoBar(base::MakeUnique<AppBannerInfoBarAndroid>(
            std::move(infobar_delegate), native_app_data));
@@ -205,7 +202,6 @@
     std::unique_ptr<ShortcutInfo> shortcut_info,
     const SkBitmap& primary_icon,
     const SkBitmap& badge_icon,
-    int event_request_id,
     bool is_webapk,
     webapk::InstallSource webapk_install_source)
     : weak_manager_(weak_manager),
@@ -213,7 +209,6 @@
       shortcut_info_(std::move(shortcut_info)),
       primary_icon_(primary_icon),
       badge_icon_(badge_icon),
-      event_request_id_(event_request_id),
       has_user_interaction_(false),
       is_webapk_(is_webapk),
       install_state_(INSTALL_NOT_STARTED),
@@ -227,14 +222,12 @@
     const base::android::ScopedJavaGlobalRef<jobject>& native_app_data,
     const SkBitmap& icon,
     const std::string& native_app_package,
-    const std::string& referrer,
-    int event_request_id)
+    const std::string& referrer)
     : app_title_(app_title),
       native_app_data_(native_app_data),
       primary_icon_(icon),
       native_app_package_(native_app_package),
       referrer_(referrer),
-      event_request_id_(event_request_id),
       has_user_interaction_(false),
       weak_ptr_factory_(this) {
   DCHECK(!native_app_data_.is_null());
@@ -342,7 +335,7 @@
     return;
 
   if (TriggeredFromBanner())
-    weak_manager_->SendBannerAccepted(event_request_id_);
+    weak_manager_->SendBannerAccepted();
 
   // Send the appinstalled event. Note that this is fired *before* the
   // installation actually takes place (which can be a significant amount of
@@ -410,7 +403,7 @@
       InfoBarService::WebContentsFromInfoBar(infobar());
 
   if (weak_manager_ && TriggeredFromBanner())
-    weak_manager_->SendBannerDismissed(event_request_id_);
+    weak_manager_->SendBannerDismissed();
 
   if (native_app_data_.is_null()) {
     if (is_webapk_)
diff --git a/chrome/browser/android/banners/app_banner_infobar_delegate_android.h b/chrome/browser/android/banners/app_banner_infobar_delegate_android.h
index ecba8527..581ae22 100644
--- a/chrome/browser/android/banners/app_banner_infobar_delegate_android.h
+++ b/chrome/browser/android/banners/app_banner_infobar_delegate_android.h
@@ -42,7 +42,6 @@
                      std::unique_ptr<ShortcutInfo> info,
                      const SkBitmap& primary_icon,
                      const SkBitmap& badge_icon,
-                     int event_request_id,
                      bool is_webapk,
                      webapk::InstallSource webapk_install_source);
 
@@ -54,8 +53,7 @@
       const base::android::ScopedJavaGlobalRef<jobject>& native_app_data,
       const SkBitmap& icon,
       const std::string& native_app_package,
-      const std::string& referrer,
-      int event_request_id);
+      const std::string& referrer);
 
   ~AppBannerInfoBarDelegateAndroid() override;
 
@@ -96,7 +94,6 @@
       std::unique_ptr<ShortcutInfo> info,
       const SkBitmap& primary_icon,
       const SkBitmap& badge_icon,
-      int event_request_id,
       bool is_webapk,
       webapk::InstallSource webapk_install_source);
 
@@ -106,8 +103,7 @@
       const base::android::ScopedJavaGlobalRef<jobject>& native_app_data,
       const SkBitmap& icon,
       const std::string& native_app_package,
-      const std::string& referrer,
-      int event_request_id);
+      const std::string& referrer);
 
   void CreateJavaDelegate();
   bool AcceptNativeApp(content::WebContents* web_contents);
@@ -158,7 +154,6 @@
 
   std::string native_app_package_;
   std::string referrer_;
-  int event_request_id_;
   bool has_user_interaction_;
 
   bool is_webapk_;
diff --git a/chrome/browser/android/banners/app_banner_manager_android.cc b/chrome/browser/android/banners/app_banner_manager_android.cc
index f50e444..967a2758 100644
--- a/chrome/browser/android/banners/app_banner_manager_android.cc
+++ b/chrome/browser/android/banners/app_banner_manager_android.cc
@@ -249,7 +249,7 @@
             contents, GetWeakPtr(),
             CreateShortcutInfo(manifest_url_, manifest_, primary_icon_url_,
                                badge_icon_url_, can_install_webapk_),
-            primary_icon_, badge_icon_, event_request_id(), can_install_webapk_,
+            primary_icon_, badge_icon_, can_install_webapk_,
             webapk::INSTALL_SOURCE_BANNER)) {
       RecordDidShowBanner("AppBanner.WebApp.Shown");
       TrackDisplayEvent(DISPLAY_EVENT_WEB_APP_BANNER_CREATED);
@@ -260,7 +260,7 @@
   } else {
     if (AppBannerInfoBarDelegateAndroid::Create(
             contents, native_app_title_, native_app_data_, primary_icon_,
-            native_app_package_, referrer_, event_request_id())) {
+            native_app_package_, referrer_)) {
       RecordDidShowBanner("AppBanner.NativeApp.Shown");
       TrackDisplayEvent(DISPLAY_EVENT_NATIVE_APP_BANNER_CREATED);
       ReportStatus(contents, SHOWING_NATIVE_APP_BANNER);
diff --git a/chrome/browser/android/history/browsing_history_bridge.cc b/chrome/browser/android/history/browsing_history_bridge.cc
index b747ae6e..185d51e1f 100644
--- a/chrome/browser/android/history/browsing_history_bridge.cc
+++ b/chrome/browser/android/history/browsing_history_bridge.cc
@@ -14,18 +14,20 @@
 #include "base/macros.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
-#include "chrome/browser/profiles/profile_android.h"
+#include "chrome/browser/profiles/profile_manager.h"
 #include "components/url_formatter/url_formatter.h"
 #include "jni/BrowsingHistoryBridge_jni.h"
 
 const int kMaxQueryCount = 150;
 
-BrowsingHistoryBridge::BrowsingHistoryBridge(
-    JNIEnv* env,
-    const JavaParamRef<jobject>& obj,
-    jobject j_profile) {
-  Profile* profile = ProfileAndroid::FromProfileAndroid(j_profile);
-  browsing_history_service_.reset(new BrowsingHistoryService(profile, this));
+BrowsingHistoryBridge::BrowsingHistoryBridge(JNIEnv* env,
+                                             const JavaParamRef<jobject>& obj,
+                                             bool is_incognito) {
+  Profile* profile = ProfileManager::GetLastUsedProfile();
+  browsing_history_service_.reset(new BrowsingHistoryService(
+      is_incognito ? profile->GetOffTheRecordProfile()
+                   : profile->GetOriginalProfile(),
+      this));
   j_history_service_obj_.Reset(env, obj);
 }
 
@@ -149,8 +151,8 @@
 
 static jlong Init(JNIEnv* env,
                   const JavaParamRef<jobject>& obj,
-                  const JavaParamRef<jobject>& j_profile) {
+                  jboolean is_incognito) {
   BrowsingHistoryBridge* bridge =
-      new BrowsingHistoryBridge(env, obj, j_profile);
+      new BrowsingHistoryBridge(env, obj, is_incognito);
   return reinterpret_cast<intptr_t>(bridge);
 }
diff --git a/chrome/browser/android/history/browsing_history_bridge.h b/chrome/browser/android/history/browsing_history_bridge.h
index 3669ade..8cde10b 100644
--- a/chrome/browser/android/history/browsing_history_bridge.h
+++ b/chrome/browser/android/history/browsing_history_bridge.h
@@ -24,7 +24,7 @@
  public:
   explicit BrowsingHistoryBridge(JNIEnv* env,
                                  const JavaParamRef<jobject>& obj,
-                                 jobject j_profile);
+                                 bool is_incognito);
   void Destroy(JNIEnv*, const JavaParamRef<jobject>&);
 
   void QueryHistory(JNIEnv* env,
diff --git a/chrome/browser/android/offline_pages/prerendering_offliner.cc b/chrome/browser/android/offline_pages/prerendering_offliner.cc
index 7466d604..8296d72 100644
--- a/chrome/browser/android/offline_pages/prerendering_offliner.cc
+++ b/chrome/browser/android/offline_pages/prerendering_offliner.cc
@@ -95,6 +95,7 @@
     save_page_params.client_id = request.client_id();
     save_page_params.proposed_offline_id = request.request_id();
     save_page_params.is_background = true;
+    save_page_params.request_origin = request.request_origin();
     // Pass in the original URL if it is different from the last committed URL
     // when redirects occur.
     if (!request.original_url().is_empty())
diff --git a/chrome/browser/android/offline_pages/prerendering_offliner_unittest.cc b/chrome/browser/android/offline_pages/prerendering_offliner_unittest.cc
index 0c91e7e..35e32f0 100644
--- a/chrome/browser/android/offline_pages/prerendering_offliner_unittest.cc
+++ b/chrome/browser/android/offline_pages/prerendering_offliner_unittest.cc
@@ -35,6 +35,7 @@
 const GURL kFileUrl("file://sailfish.png");
 const ClientId kClientId("AsyncLoading", "88");
 const bool kUserRequested = true;
+const char kRequestOrigin[] = "abc.xyz";
 
 // Mock Loader for testing the Offliner calls.
 class MockPrerenderingLoader : public PrerenderingLoader {
@@ -141,6 +142,7 @@
                 const SavePageCallback& callback) override {
     mock_saving_ = true;
     save_page_callback_ = callback;
+    save_page_params_ = save_page_params;
   }
 
   void CompleteSavingAsArchiveCreationFailed() {
@@ -169,8 +171,11 @@
 
   bool mock_saving() const { return mock_saving_; }
 
+  SavePageParams save_page_params() { return save_page_params_; }
+
  private:
   bool mock_saving_;
+  SavePageParams save_page_params_;
   SavePageCallback save_page_callback_;
 
   DISALLOW_COPY_AND_ASSIGN(MockOfflinePageModel);
@@ -341,6 +346,18 @@
   EXPECT_TRUE(loader()->IsIdle());
 }
 
+TEST_F(PrerenderingOfflinerTest, PropagatesRequestOrigin) {
+  base::Time creation_time = base::Time::Now();
+  SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
+                          kUserRequested);
+  request.set_request_origin(kRequestOrigin);
+  EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
+                                      progress_callback()));
+  loader()->CompleteLoadingAsLoaded();
+  PumpLoop();
+  EXPECT_EQ(kRequestOrigin, model()->save_page_params().request_origin);
+}
+
 TEST_F(PrerenderingOfflinerTest, CancelWhenLoaded) {
   base::Time creation_time = base::Time::Now();
   SavePageRequest request(
diff --git a/chrome/browser/android/vr_shell/textures/url_bar_texture_unittest.cc b/chrome/browser/android/vr_shell/textures/url_bar_texture_unittest.cc
index bd68de9..f9701a40 100644
--- a/chrome/browser/android/vr_shell/textures/url_bar_texture_unittest.cc
+++ b/chrome/browser/android/vr_shell/textures/url_bar_texture_unittest.cc
@@ -47,7 +47,7 @@
     unsupported_mode_ = UiUnsupportedMode::kCount;
     ToolbarState state(gurl, SecurityLevel::DANGEROUS,
                        &toolbar::kHttpsInvalidIcon,
-                       base::UTF8ToUTF16("Not secure"), true);
+                       base::UTF8ToUTF16("Not secure"), true, false);
     ASSERT_TRUE(state.should_display_url);
     SetToolbarState(state);
     gfx::Size texture_size = GetPreferredTextureSize(kUrlWidthPixels);
diff --git a/chrome/browser/android/vr_shell/toolbar_helper.cc b/chrome/browser/android/vr_shell/toolbar_helper.cc
index 3e1bbd7..b776a57 100644
--- a/chrome/browser/android/vr_shell/toolbar_helper.cc
+++ b/chrome/browser/android/vr_shell/toolbar_helper.cc
@@ -30,7 +30,7 @@
   ToolbarState state(
       toolbar_model_->GetURL(), toolbar_model_->GetSecurityLevel(true),
       &toolbar_model_->GetVectorIcon(), toolbar_model_->GetSecureVerboseText(),
-      toolbar_model_->ShouldDisplayURL());
+      toolbar_model_->ShouldDisplayURL(), toolbar_model_->IsOfflinePage());
 
   if (current_state_ == state)
     return;
diff --git a/chrome/browser/android/vr_shell/toolbar_state.cc b/chrome/browser/android/vr_shell/toolbar_state.cc
index d752f7f2..2d684527 100644
--- a/chrome/browser/android/vr_shell/toolbar_state.cc
+++ b/chrome/browser/android/vr_shell/toolbar_state.cc
@@ -10,24 +10,30 @@
     : gurl(GURL()),
       security_level(security_state::SecurityLevel::NONE),
       vector_icon(nullptr),
-      should_display_url(true) {}
+      should_display_url(true),
+      offline_page(false) {}
 
 ToolbarState::ToolbarState(const GURL& url,
                            security_state::SecurityLevel level,
                            const gfx::VectorIcon* icon,
                            base::string16 verbose_text,
-                           bool display_url)
+                           bool display_url,
+                           bool offline)
     : gurl(url),
       security_level(level),
       vector_icon(icon),
       secure_verbose_text(verbose_text),
-      should_display_url(display_url) {}
+      should_display_url(display_url),
+      offline_page(offline) {}
+
+ToolbarState::ToolbarState(const ToolbarState& other) = default;
 
 bool ToolbarState::operator==(const ToolbarState& other) const {
   return (gurl == other.gurl && security_level == other.security_level &&
           vector_icon == other.vector_icon &&
           should_display_url == other.should_display_url &&
-          secure_verbose_text == other.secure_verbose_text);
+          secure_verbose_text == other.secure_verbose_text &&
+          offline_page == other.offline_page);
 }
 
 bool ToolbarState::operator!=(const ToolbarState& other) const {
diff --git a/chrome/browser/android/vr_shell/toolbar_state.h b/chrome/browser/android/vr_shell/toolbar_state.h
index a39de5f6..0a1eb78 100644
--- a/chrome/browser/android/vr_shell/toolbar_state.h
+++ b/chrome/browser/android/vr_shell/toolbar_state.h
@@ -22,7 +22,9 @@
                security_state::SecurityLevel level,
                const gfx::VectorIcon* icon,
                base::string16 verbose_text,
-               bool display_url);
+               bool display_url,
+               bool offline);
+  ToolbarState(const ToolbarState& other);
 
   bool operator==(const ToolbarState& other) const;
   bool operator!=(const ToolbarState& other) const;
@@ -32,6 +34,7 @@
   const gfx::VectorIcon* vector_icon;
   base::string16 secure_verbose_text;
   bool should_display_url;
+  bool offline_page;
 };
 
 }  // namespace vr_shell
diff --git a/chrome/browser/android/webapps/add_to_homescreen_manager.cc b/chrome/browser/android/webapps/add_to_homescreen_manager.cc
index 5a80899..44c823e9 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_manager.cc
+++ b/chrome/browser/android/webapps/add_to_homescreen_manager.cc
@@ -180,6 +180,5 @@
   banners::AppBannerInfoBarDelegateAndroid::Create(
       web_contents, app_banner_manager->GetWeakPtr(),
       base::MakeUnique<ShortcutInfo>(info), primary_icon, badge_icon,
-      -1 /* event_request_id */, true /* is_webapk */,
-      webapk::INSTALL_SOURCE_MENU);
+      true /* is_webapk */, webapk::INSTALL_SOURCE_MENU);
 }
diff --git a/chrome/browser/autofill/android/phone_number_util_android.cc b/chrome/browser/autofill/android/phone_number_util_android.cc
index ae89358..29d4f0e 100644
--- a/chrome/browser/autofill/android/phone_number_util_android.cc
+++ b/chrome/browser/autofill/android/phone_number_util_android.cc
@@ -51,10 +51,10 @@
       format);
 }
 
-// Checks whether the given number |jphone_number| is valid by using
-// i18n::phonenumbers::PhoneNumberUtil::IsValidNumber.
-bool IsValidNumberImpl(const std::string& phone_number,
-                       const std::string& country_code) {
+// Checks whether the given number |jphone_number| is a possible number by using
+// i18n::phonenumbers::PhoneNumberUtil::IsPossibleNumber.
+bool IsPossibleNumberImpl(const std::string& phone_number,
+                          const std::string& country_code) {
   PhoneNumber parsed_number;
   PhoneNumberUtil* phone_number_util = PhoneNumberUtil::GetInstance();
   if (phone_number_util->Parse(phone_number, country_code, &parsed_number) !=
@@ -62,7 +62,7 @@
     return false;
   }
 
-  return phone_number_util->IsValidNumber(parsed_number);
+  return phone_number_util->IsPossibleNumber(parsed_number);
 }
 
 }  // namespace
@@ -101,19 +101,20 @@
                              PhoneNumberUtil::PhoneNumberFormat::E164));
 }
 
-// Checks whether the given number |jphone_number| is valid for a given country
-// |jcountry_code| by using i18n::phonenumbers::PhoneNumberUtil::IsValidNumber.
-jboolean IsValidNumber(JNIEnv* env,
-                       const base::android::JavaParamRef<jclass>& jcaller,
-                       const JavaParamRef<jstring>& jphone_number,
-                       const JavaParamRef<jstring>& jcountry_code) {
+// Checks whether the given number |jphone_number| is a possible number for a
+// given country |jcountry_code| by using
+// i18n::phonenumbers::PhoneNumberUtil::IsPossibleNumber.
+jboolean IsPossibleNumber(JNIEnv* env,
+                          const base::android::JavaParamRef<jclass>& jcaller,
+                          const JavaParamRef<jstring>& jphone_number,
+                          const JavaParamRef<jstring>& jcountry_code) {
   const std::string phone_number = ConvertJavaStringToUTF8(env, jphone_number);
   const std::string country_code =
       jcountry_code.is_null() ? autofill::AutofillCountry::CountryCodeForLocale(
                                     g_browser_process->GetApplicationLocale())
                               : ConvertJavaStringToUTF8(env, jcountry_code);
 
-  return IsValidNumberImpl(phone_number, country_code);
+  return IsPossibleNumberImpl(phone_number, country_code);
 }
 
 }  // namespace autofill
diff --git a/chrome/browser/banners/app_banner_infobar_delegate_desktop.cc b/chrome/browser/banners/app_banner_infobar_delegate_desktop.cc
index 60435211..1a86016 100644
--- a/chrome/browser/banners/app_banner_infobar_delegate_desktop.cc
+++ b/chrome/browser/banners/app_banner_infobar_delegate_desktop.cc
@@ -26,28 +26,24 @@
     content::WebContents* web_contents,
     base::WeakPtr<AppBannerManager> weak_manager,
     extensions::BookmarkAppHelper* bookmark_app_helper,
-    const content::Manifest& manifest,
-    int event_request_id) {
+    const content::Manifest& manifest) {
   InfoBarService* infobar_service =
       InfoBarService::FromWebContents(web_contents);
   return infobar_service->AddInfoBar(infobar_service->CreateConfirmInfoBar(
       std::unique_ptr<ConfirmInfoBarDelegate>(
           new AppBannerInfoBarDelegateDesktop(weak_manager, bookmark_app_helper,
-                                              manifest, event_request_id))));
+                                              manifest))));
 }
 
 AppBannerInfoBarDelegateDesktop::AppBannerInfoBarDelegateDesktop(
     base::WeakPtr<AppBannerManager> weak_manager,
     extensions::BookmarkAppHelper* bookmark_app_helper,
-    const content::Manifest& manifest,
-    int event_request_id)
+    const content::Manifest& manifest)
     : ConfirmInfoBarDelegate(),
       weak_manager_(weak_manager),
       bookmark_app_helper_(bookmark_app_helper),
       manifest_(manifest),
-      event_request_id_(event_request_id),
-      has_user_interaction_(false) {
-}
+      has_user_interaction_(false) {}
 
 AppBannerInfoBarDelegateDesktop::~AppBannerInfoBarDelegateDesktop() {
   if (!has_user_interaction_)
@@ -76,7 +72,7 @@
       InfoBarService::WebContentsFromInfoBar(infobar());
   if (web_contents) {
     if (weak_manager_)
-      weak_manager_->SendBannerDismissed(event_request_id_);
+      weak_manager_->SendBannerDismissed();
 
     AppBannerSettingsHelper::RecordBannerDismissEvent(
         web_contents, manifest_.start_url.spec(), AppBannerSettingsHelper::WEB);
diff --git a/chrome/browser/banners/app_banner_infobar_delegate_desktop.h b/chrome/browser/banners/app_banner_infobar_delegate_desktop.h
index 8fa1764..640d606 100644
--- a/chrome/browser/banners/app_banner_infobar_delegate_desktop.h
+++ b/chrome/browser/banners/app_banner_infobar_delegate_desktop.h
@@ -34,15 +34,13 @@
       content::WebContents* web_contents,
       base::WeakPtr<AppBannerManager> weak_manager,
       extensions::BookmarkAppHelper* bookmark_app_helper,
-      const content::Manifest& manifest,
-      int event_request_id);
+      const content::Manifest& manifest);
 
  private:
   AppBannerInfoBarDelegateDesktop(
       base::WeakPtr<AppBannerManager> weak_manager,
       extensions::BookmarkAppHelper* bookmark_app_helper,
-      const content::Manifest& manifest,
-      int event_request_id);
+      const content::Manifest& manifest);
   ~AppBannerInfoBarDelegateDesktop() override;
 
   // ConfirmInfoBarDelegate:
@@ -58,7 +56,6 @@
   base::WeakPtr<AppBannerManager> weak_manager_;
   extensions::BookmarkAppHelper* bookmark_app_helper_;
   content::Manifest manifest_;
-  int event_request_id_;
   bool has_user_interaction_;
 
   DISALLOW_COPY_AND_ASSIGN(AppBannerInfoBarDelegateDesktop);
diff --git a/chrome/browser/banners/app_banner_manager.cc b/chrome/browser/banners/app_banner_manager.cc
index ee166f2..b9675ac71 100644
--- a/chrome/browser/banners/app_banner_manager.cc
+++ b/chrome/browser/banners/app_banner_manager.cc
@@ -30,7 +30,6 @@
 
 namespace {
 
-int gCurrentRequestID = -1;
 int gTimeDeltaInDaysForTesting = 0;
 
 InstallableParams ParamsToGetManifest() {
@@ -65,7 +64,7 @@
   // if it's been triggered from devtools.
   if (is_active_or_pending()) {
     DCHECK(is_debug_mode);
-    weak_factory_.InvalidateWeakPtrs();
+    ResetBindings();
   }
 
   UpdateState(State::ACTIVE);
@@ -115,20 +114,14 @@
   installation_service->OnInstall();
 }
 
-void AppBannerManager::SendBannerAccepted(int request_id) {
-  if (request_id != gCurrentRequestID)
-    return;
-
-  DCHECK(event_.is_bound());
-  event_->BannerAccepted(GetBannerType());
+void AppBannerManager::SendBannerAccepted() {
+  if (event_.is_bound())
+    event_->BannerAccepted(GetBannerType());
 }
 
-void AppBannerManager::SendBannerDismissed(int request_id) {
-  if (request_id != gCurrentRequestID)
-    return;
-
-  DCHECK(event_.is_bound());
-  event_->BannerDismissed();
+void AppBannerManager::SendBannerDismissed() {
+  if (event_.is_bound())
+    event_->BannerDismissed();
 }
 
 base::WeakPtr<AppBannerManager> AppBannerManager::GetWeakPtr() {
@@ -141,7 +134,6 @@
           Profile::FromBrowserContext(web_contents->GetBrowserContext()))),
       state_(State::INACTIVE),
       manager_(InstallableManager::FromWebContents(web_contents)),
-      event_request_id_(-1),
       binding_(this),
       has_sufficient_engagement_(false),
       load_finished_(false),
@@ -340,11 +332,7 @@
   // explicitly not logged.
   DCHECK(!need_to_log_status_ || is_active());
 
-  weak_factory_.InvalidateWeakPtrs();
-  binding_.Close();
-  controller_.reset();
-  event_.reset();
-
+  ResetBindings();
   UpdateState(State::COMPLETE);
   need_to_log_status_ = false;
   has_sufficient_engagement_ = false;
@@ -352,9 +340,7 @@
 
 void AppBannerManager::SendBannerPromptRequest() {
   RecordCouldShowBanner();
-
   TrackBeforeInstallEvent(BEFORE_INSTALL_EVENT_CREATED);
-  event_request_id_ = ++gCurrentRequestID;
 
   web_contents()->GetMainFrame()->GetRemoteInterfaces()->GetInterface(
       mojo::MakeRequest(&controller_));
@@ -470,6 +456,13 @@
   }
 }
 
+void AppBannerManager::ResetBindings() {
+  weak_factory_.InvalidateWeakPtrs();
+  binding_.Close();
+  controller_.reset();
+  event_.reset();
+}
+
 void AppBannerManager::RecordCouldShowBanner() {
   content::WebContents* contents = web_contents();
   DCHECK(contents);
diff --git a/chrome/browser/banners/app_banner_manager.h b/chrome/browser/banners/app_banner_manager.h
index fa59da5..d2745644 100644
--- a/chrome/browser/banners/app_banner_manager.h
+++ b/chrome/browser/banners/app_banner_manager.h
@@ -68,13 +68,11 @@
   // resolved, but is required by the install event spec.
   void OnInstall();
 
-  // Sends a message to the renderer that the user accepted the banner. Does
-  // nothing if |request_id| does not match the current request.
-  void SendBannerAccepted(int request_id);
+  // Sends a message to the renderer that the user accepted the banner.
+  void SendBannerAccepted();
 
-  // Sends a message to the renderer that the user dismissed the banner. Does
-  // nothing if |request_id| does not match the current request.
-  void SendBannerDismissed(int request_id);
+  // Sends a message to the renderer that the user dismissed the banner.
+  void SendBannerDismissed();
 
   // Returns a WeakPtr to this object. Exposed so subclasses/infobars may
   // may bind callbacks without needing their own WeakPtrFactory.
@@ -217,7 +215,6 @@
   // Subclass accessors for private fields which should not be changed outside
   // this class.
   InstallableManager* manager() const { return manager_; }
-  int event_request_id() const { return event_request_id_; }
   bool is_active() const { return state_ == State::ACTIVE; }
   bool is_active_or_pending() const {
     switch (state_) {
@@ -266,6 +263,9 @@
  private:
   friend class AppBannerManagerTest;
 
+  // Voids all outstanding weak pointers and service pointers.
+  void ResetBindings();
+
   // Record that the banner could be shown at this point, if the triggering
   // heuristic allowed.
   void RecordCouldShowBanner();
@@ -288,10 +288,6 @@
   // Fetches the data required to display a banner for the current page.
   InstallableManager* manager_;
 
-  // A monotonically increasing id to verify the response to the
-  // beforeinstallprompt event from the renderer.
-  int event_request_id_;
-
   // We do not want to trigger a banner when the manager is attached to
   // a WebContents that is playing video. Banners triggering on a site in the
   // background will appear when the tab is reactivated.
diff --git a/chrome/browser/banners/app_banner_manager_desktop.cc b/chrome/browser/banners/app_banner_manager_desktop.cc
index 43eb04d..e141e10 100644
--- a/chrome/browser/banners/app_banner_manager_desktop.cc
+++ b/chrome/browser/banners/app_banner_manager_desktop.cc
@@ -42,7 +42,7 @@
     if (extension == nullptr) {
       Stop();
     } else {
-      SendBannerAccepted(event_request_id());
+      SendBannerAccepted();
 
       AppBannerSettingsHelper::RecordBannerInstallEvent(
           contents, GetAppIdentifier(), AppBannerSettingsHelper::WEB);
@@ -73,8 +73,7 @@
   // the InfoBarService to show the banner. On desktop, an InfoBar class
   // is not required, and the delegate calls the InfoBarService.
   infobars::InfoBar* infobar = AppBannerInfoBarDelegateDesktop::Create(
-      contents, GetWeakPtr(), bookmark_app_helper_.get(), manifest_,
-      event_request_id());
+      contents, GetWeakPtr(), bookmark_app_helper_.get(), manifest_);
   if (infobar) {
     RecordDidShowBanner("AppBanner.WebApp.Shown");
     TrackDisplayEvent(DISPLAY_EVENT_WEB_APP_BANNER_CREATED);
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 818d057..12ba413e 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -442,9 +442,9 @@
 void RundownTaskCounter::Post(base::SequencedTaskRunner* task_runner) {
   // As the count starts off at one, it should never get to zero unless
   // TimedWait has been called.
-  DCHECK(!base::AtomicRefCountIsZero(&count_));
+  DCHECK(!count_.IsZero());
 
-  base::AtomicRefCountInc(&count_);
+  count_.Increment();
 
   // The task must be non-nestable to guarantee that it runs after all tasks
   // currently scheduled on |task_runner| have completed.
@@ -453,7 +453,7 @@
 }
 
 void RundownTaskCounter::Decrement() {
-  if (!base::AtomicRefCountDec(&count_))
+  if (!count_.Decrement())
     waitable_event_.Signal();
 }
 
@@ -1300,15 +1300,15 @@
   ResourceDispatcherHost::Get()->SetAllowCrossOriginAuthPrompt(value);
 }
 
-void BrowserProcessImpl::ApplyMetricsReportingPolicy() {
 #if !defined(OS_ANDROID)
+void BrowserProcessImpl::ApplyMetricsReportingPolicy() {
   GoogleUpdateSettings::CollectStatsConsentTaskRunner()->PostTask(
       FROM_HERE,
       base::BindOnce(
           base::IgnoreResult(&GoogleUpdateSettings::SetCollectStatsConsent),
           ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled()));
-#endif
 }
+#endif
 
 void BrowserProcessImpl::CacheDefaultWebClientState() {
 #if defined(OS_CHROMEOS)
diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_process_impl.h
index 33ead42..890e5e9 100644
--- a/chrome/browser/browser_process_impl.h
+++ b/chrome/browser/browser_process_impl.h
@@ -187,7 +187,9 @@
 
   void ApplyAllowCrossOriginAuthPromptPolicy();
   void ApplyDefaultBrowserPolicy();
+#if !defined(OS_ANDROID)
   void ApplyMetricsReportingPolicy();
+#endif
 
   void CacheDefaultWebClientState();
 
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index 294ab87..7932191 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -675,7 +675,7 @@
 
   const base::CommandLine* command_line =
       base::CommandLine::ForCurrentProcess();
-  if (command_line->HasSwitch(switches::kEnableBenchmarking) ||
+  if (command_line->HasSwitch(variations::switches::kEnableBenchmarking) ||
       command_line->HasSwitch(cc::switches::kEnableGpuBenchmarking)) {
     base::FieldTrial::EnableBenchmarking();
   }
@@ -719,10 +719,12 @@
   // Force the variation ids selected in chrome://flags and/or specified using
   // the command-line flag.
   bool result = http_header_provider->ForceVariationIds(
-      command_line->GetSwitchValueASCII(switches::kForceVariationIds),
+      command_line->GetSwitchValueASCII(
+          variations::switches::kForceVariationIds),
       &variation_ids);
   CHECK(result) << "Invalid list of variation ids specified (either in --"
-                << switches::kForceVariationIds << " or in chrome://flags)";
+                << variations::switches::kForceVariationIds
+                << " or in chrome://flags)";
 
   feature_list->InitializeFromCommandLine(
       command_line->GetSwitchValueASCII(switches::kEnableFeatures),
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 1466eac..537f13d 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -161,6 +161,7 @@
 #include "components/ukm/ukm_interface.h"
 #include "components/url_formatter/url_fixer.h"
 #include "components/variations/variations_associated_data.h"
+#include "components/variations/variations_switches.h"
 #include "components/version_info/version_info.h"
 #include "content/public/browser/browser_child_process_host.h"
 #include "content/public/browser/browser_main_parts.h"
@@ -1804,7 +1805,7 @@
       switches::kDisableBundledPpapiFlash,
       switches::kDisableCastStreamingHWEncoding,
       switches::kDisableJavaScriptHarmonyShipping,
-      switches::kEnableBenchmarking,
+      variations::switches::kEnableBenchmarking,
       switches::kEnableDistillabilityService,
       switches::kEnableNaCl,
 #if !defined(DISABLE_NACL)
@@ -1872,7 +1873,7 @@
   // The command line switch kEnableBenchmarking needs to be specified along
   // with the kEnableStatsTable switch to ensure that the stats table global
   // is initialized correctly.
-  if (command_line->HasSwitch(switches::kEnableBenchmarking))
+  if (command_line->HasSwitch(variations::switches::kEnableBenchmarking))
     DCHECK(command_line->HasSwitch(switches::kEnableStatsTable));
 
   StackSamplingConfiguration::Get()->AppendCommandLineSwitchForChildProcess(
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 6c297c51..0c32d8d 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -1775,6 +1775,7 @@
     "input_method/input_method_manager_impl_unittest.cc",
     "input_method/input_method_persistence_unittest.cc",
     "locale_change_guard_unittest.cc",
+    "lock_screen_apps/app_manager_impl_unittest.cc",
     "lock_screen_apps/state_controller_unittest.cc",
     "login/auth/cryptohome_authenticator_unittest.cc",
     "login/easy_unlock/easy_unlock_challenge_wrapper_unittest.cc",
diff --git a/chrome/browser/chromeos/arc/arc_service_launcher.cc b/chrome/browser/chromeos/arc/arc_service_launcher.cc
index eea3de5a..57a92c4 100644
--- a/chrome/browser/chromeos/arc/arc_service_launcher.cc
+++ b/chrome/browser/chromeos/arc/arc_service_launcher.cc
@@ -9,7 +9,6 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
-#include "base/threading/sequenced_worker_pool.h"
 #include "chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.h"
 #include "chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.h"
 #include "chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.h"
@@ -56,7 +55,6 @@
 #include "components/arc/volume_mounter/arc_volume_mounter_bridge.h"
 #include "components/prefs/pref_member.h"
 #include "components/user_manager/user_manager.h"
-#include "content/public/browser/browser_thread.h"
 #include "ui/arc/notification/arc_notification_manager.h"
 
 namespace arc {
@@ -85,8 +83,7 @@
 
 void ArcServiceLauncher::Initialize() {
   // Create ARC service manager.
-  arc_service_manager_ = base::MakeUnique<ArcServiceManager>(
-      content::BrowserThread::GetBlockingPool());
+  arc_service_manager_ = base::MakeUnique<ArcServiceManager>();
 
   ArcBridgeService* arc_bridge_service =
       arc_service_manager_->arc_bridge_service();
@@ -94,8 +91,7 @@
   // Creates ArcSessionManager at first.
   arc_session_manager_ =
       base::MakeUnique<ArcSessionManager>(base::MakeUnique<ArcSessionRunner>(
-          base::Bind(ArcSession::Create, arc_bridge_service,
-                     arc_service_manager_->blocking_task_runner())));
+          base::Bind(ArcSession::Create, arc_bridge_service)));
 
   // List in lexicographical order.
   arc_service_manager_->AddService(
@@ -110,8 +106,8 @@
       base::MakeUnique<ArcBootErrorNotification>(arc_bridge_service));
   arc_service_manager_->AddService(
       base::MakeUnique<ArcClipboardBridge>(arc_bridge_service));
-  arc_service_manager_->AddService(base::MakeUnique<ArcCrashCollectorBridge>(
-      arc_bridge_service, arc_service_manager_->blocking_task_runner()));
+  arc_service_manager_->AddService(
+      base::MakeUnique<ArcCrashCollectorBridge>(arc_bridge_service));
   arc_service_manager_->AddService(
       base::MakeUnique<ArcDownloadsWatcherService>(arc_bridge_service));
   arc_service_manager_->AddService(
diff --git a/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc b/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc
index ba57160..a9f7953 100644
--- a/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc
+++ b/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc
@@ -142,7 +142,7 @@
     profile_ = profile_builder.Build();
     StartPreferenceSyncing();
 
-    arc_service_manager_ = base::MakeUnique<ArcServiceManager>(nullptr);
+    arc_service_manager_ = base::MakeUnique<ArcServiceManager>();
     arc_session_manager_ = base::MakeUnique<ArcSessionManager>(
         base::MakeUnique<ArcSessionRunner>(base::Bind(FakeArcSession::Create)));
 
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_content_file_system_async_file_util_unittest.cc b/chrome/browser/chromeos/arc/fileapi/arc_content_file_system_async_file_util_unittest.cc
index 7342524..9b95c908 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_content_file_system_async_file_util_unittest.cc
+++ b/chrome/browser/chromeos/arc/fileapi/arc_content_file_system_async_file_util_unittest.cc
@@ -42,7 +42,7 @@
     fake_file_system_.AddFile(
         File(kArcUrl, kData, kMimeType, File::Seekable::NO));
 
-    arc_service_manager_ = base::MakeUnique<ArcServiceManager>(nullptr);
+    arc_service_manager_ = base::MakeUnique<ArcServiceManager>();
     arc_service_manager_->AddService(
         ArcFileSystemOperationRunner::CreateForTesting(
             arc_service_manager_->arc_bridge_service()));
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc b/chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc
index 52d1c70..9fd8cb5 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc
+++ b/chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc
@@ -69,7 +69,7 @@
     fake_file_system_.AddFile(
         File(kArcUrlPipe, kData, kMimeType, File::Seekable::NO));
 
-    arc_service_manager_ = base::MakeUnique<ArcServiceManager>(nullptr);
+    arc_service_manager_ = base::MakeUnique<ArcServiceManager>();
     arc_service_manager_->AddService(
         ArcFileSystemOperationRunner::CreateForTesting(
             arc_service_manager_->arc_bridge_service()));
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
index 3ee78a9f..e9653d19 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
+++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
@@ -116,7 +116,7 @@
       fake_file_system_.AddDocument(ToDocument(spec));
     }
 
-    arc_service_manager_ = base::MakeUnique<ArcServiceManager>(nullptr);
+    arc_service_manager_ = base::MakeUnique<ArcServiceManager>();
     arc_service_manager_->AddService(
         ArcFileSystemOperationRunner::CreateForTesting(
             arc_service_manager_->arc_bridge_service()));
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner_unittest.cc b/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner_unittest.cc
index d334a08e..c6aa025 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner_unittest.cc
+++ b/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner_unittest.cc
@@ -35,7 +35,7 @@
   ~ArcFileSystemOperationRunnerTest() override = default;
 
   void SetUp() override {
-    arc_service_manager_ = base::MakeUnique<ArcServiceManager>(nullptr);
+    arc_service_manager_ = base::MakeUnique<ArcServiceManager>();
     arc_service_manager_->arc_bridge_service()->file_system()->SetInstance(
         &file_system_instance_);
     arc_service_manager_->AddService(
diff --git a/chrome/browser/chromeos/arc/notification/arc_provision_notification_service_unittest.cc b/chrome/browser/chromeos/arc/notification/arc_provision_notification_service_unittest.cc
index 2fff576..b5bbea1 100644
--- a/chrome/browser/chromeos/arc/notification/arc_provision_notification_service_unittest.cc
+++ b/chrome/browser/chromeos/arc/notification/arc_provision_notification_service_unittest.cc
@@ -69,7 +69,7 @@
     profile_builder.SetPath(temp_dir_.GetPath().AppendASCII("TestArcProfile"));
     profile_ = profile_builder.Build();
 
-    arc_service_manager_ = base::MakeUnique<ArcServiceManager>(nullptr);
+    arc_service_manager_ = base::MakeUnique<ArcServiceManager>();
     arc_session_manager_ = base::MakeUnique<ArcSessionManager>(
         base::MakeUnique<ArcSessionRunner>(base::Bind(FakeArcSession::Create)));
     std::unique_ptr<MockArcProvisionNotificationServiceDelegate>
diff --git a/chrome/browser/chromeos/lock_screen_apps/app_manager_impl.cc b/chrome/browser/chromeos/lock_screen_apps/app_manager_impl.cc
index f7be4dc..6f2a7c98 100644
--- a/chrome/browser/chromeos/lock_screen_apps/app_manager_impl.cc
+++ b/chrome/browser/chromeos/lock_screen_apps/app_manager_impl.cc
@@ -4,16 +4,122 @@
 
 #include "chrome/browser/chromeos/lock_screen_apps/app_manager_impl.h"
 
+#include <memory>
+#include <utility>
+
+#include "apps/launcher.h"
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/memory/ptr_util.h"
+#include "base/memory/ref_counted.h"
+#include "base/sequenced_task_runner.h"
+#include "base/strings/string16.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "chrome/browser/chromeos/note_taking_helper.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/extensions/extension_assets_manager.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/common/pref_names.h"
+#include "extensions/browser/extension_registry.h"
+#include "extensions/browser/extension_system.h"
+#include "extensions/browser/install_flag.h"
+#include "extensions/common/api/app_runtime.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/extension_set.h"
+#include "extensions/common/file_util.h"
+#include "extensions/common/manifest.h"
 
 namespace lock_screen_apps {
 
-AppManagerImpl::AppManagerImpl() = default;
+namespace {
+
+using ExtensionCallback = base::Callback<void(
+    const scoped_refptr<const extensions::Extension>& extension)>;
+
+void InvokeCallbackOnTaskRunner(
+    const ExtensionCallback& callback,
+    const scoped_refptr<base::SequencedTaskRunner>& task_runner,
+    const scoped_refptr<const extensions::Extension>& extension) {
+  task_runner->PostTask(FROM_HERE, base::Bind(callback, extension));
+}
+
+// Loads extension with the provided |extension_id|, |location|, and
+// |creation_flags| from the |version_dir| directory - directory to which the
+// extension has been installed.
+// |temp_copy| - scoped dir that contains the path from which extension
+//     resources have been installed. Not used in this method, but passed around
+//     to keep the directory in scope while the app is being installed.
+// |callback| - callback to which the loaded app should be passed.
+void LoadInstalledExtension(const std::string& extension_id,
+                            extensions::Manifest::Location install_source,
+                            int creation_flags,
+                            std::unique_ptr<base::ScopedTempDir> temp_copy,
+                            const ExtensionCallback& callback,
+                            const base::FilePath& version_dir) {
+  if (version_dir.empty()) {
+    callback.Run(nullptr);
+    return;
+  }
+
+  std::string error;
+  scoped_refptr<const extensions::Extension> extension =
+      extensions::file_util::LoadExtension(
+          version_dir, extension_id, install_source, creation_flags, &error);
+  callback.Run(extension);
+}
+
+// Installs |extension| as a copy of an extension unpacked at |original_path|
+// into |target_install_dir|.
+// |profile| is the profile to which the extension is being installed.
+// |callback| - called with the app loaded from the final installation path.
+void InstallExtensionCopy(
+    const scoped_refptr<const extensions::Extension>& extension,
+    const base::FilePath& original_path,
+    const base::FilePath& target_install_dir,
+    Profile* profile,
+    const ExtensionCallback& callback) {
+  base::FilePath target_dir = target_install_dir.Append(extension->id());
+  base::FilePath install_temp_dir =
+      extensions::file_util::GetInstallTempDir(target_dir);
+  auto extension_temp_dir = base::MakeUnique<base::ScopedTempDir>();
+  if (install_temp_dir.empty() ||
+      !extension_temp_dir->CreateUniqueTempDirUnderPath(install_temp_dir)) {
+    callback.Run(nullptr);
+    return;
+  }
+
+  // Copy the original extension path to a temp path to prevent
+  // ExtensionAssetsManager from deleting it (as InstallExtension renames the
+  // source path to a new location under the target install directory).
+  base::FilePath temp_copy =
+      extension_temp_dir->GetPath().Append(original_path.BaseName());
+  if (!base::CopyDirectory(original_path, temp_copy, true /* recursive */)) {
+    callback.Run(nullptr);
+    return;
+  }
+
+  // Note: |extension_temp_dir| is passed around to ensure it stays in scope
+  // until the app installation is done.
+  extensions::ExtensionAssetsManager::GetInstance()->InstallExtension(
+      extension.get(), temp_copy, target_install_dir, profile,
+      base::Bind(&LoadInstalledExtension, extension->id(),
+                 extension->location(), extension->creation_flags(),
+                 base::Passed(std::move(extension_temp_dir)), callback));
+}
+
+}  // namespace
+
+AppManagerImpl::AppManagerImpl()
+    : extensions_observer_(this), weak_ptr_factory_(this) {}
 
 AppManagerImpl::~AppManagerImpl() = default;
 
 void AppManagerImpl::Initialize(Profile* primary_profile,
                                 Profile* lock_screen_profile) {
+  DCHECK_EQ(State::kNotInitialized, state_);
   DCHECK(primary_profile);
   DCHECK(lock_screen_profile);
   DCHECK_NE(primary_profile, lock_screen_profile);
@@ -30,24 +136,243 @@
 
   primary_profile_ = primary_profile;
   lock_screen_profile_ = lock_screen_profile;
+  state_ = State::kInactive;
+
+  pref_change_registrar_.Init(primary_profile->GetPrefs());
+  pref_change_registrar_.Add(
+      prefs::kNoteTakingAppId,
+      base::Bind(&AppManagerImpl::OnNoteTakingExtensionChanged,
+                 base::Unretained(this)));
+  pref_change_registrar_.Add(
+      prefs::kNoteTakingAppEnabledOnLockScreen,
+      base::Bind(&AppManagerImpl::OnNoteTakingExtensionChanged,
+                 base::Unretained(this)));
 }
 
 void AppManagerImpl::Start(const base::Closure& note_taking_changed_callback) {
+  DCHECK_NE(State::kNotInitialized, state_);
+
   note_taking_changed_callback_ = note_taking_changed_callback;
+  extensions_observer_.Add(
+      extensions::ExtensionRegistry::Get(primary_profile_));
+
+  if (state_ == State::kActive)
+    return;
+
+  lock_screen_app_id_.clear();
+  std::string app_id = FindLockScreenNoteTakingApp();
+  if (app_id.empty()) {
+    state_ = State::kAppUnavailable;
+    return;
+  }
+
+  state_ = AddAppToLockScreenProfile(app_id);
+  if (state_ == State::kActive || state_ == State::kActivating)
+    lock_screen_app_id_ = app_id;
 }
 
-void AppManagerImpl::Stop() {}
+void AppManagerImpl::Stop() {
+  DCHECK_NE(State::kNotInitialized, state_);
+
+  note_taking_changed_callback_.Reset();
+  extensions_observer_.RemoveAll();
+
+  if (state_ == State::kInactive)
+    return;
+
+  RemoveAppFromLockScreenProfile(lock_screen_app_id_);
+  lock_screen_app_id_.clear();
+  state_ = State::kInactive;
+}
 
 bool AppManagerImpl::IsNoteTakingAppAvailable() const {
-  return false;
+  return state_ == State::kActive && !lock_screen_app_id_.empty();
 }
 
 std::string AppManagerImpl::GetNoteTakingAppId() const {
-  return std::string();
+  if (!IsNoteTakingAppAvailable())
+    return std::string();
+  return lock_screen_app_id_;
 }
 
 bool AppManagerImpl::LaunchNoteTaking() {
-  return false;
+  if (!IsNoteTakingAppAvailable())
+    return false;
+
+  const extensions::ExtensionRegistry* extension_registry =
+      extensions::ExtensionRegistry::Get(lock_screen_profile_);
+  const extensions::Extension* app = extension_registry->GetExtensionById(
+      lock_screen_app_id_, extensions::ExtensionRegistry::ENABLED);
+  if (!app)
+    return false;
+
+  auto action_data =
+      base::MakeUnique<extensions::api::app_runtime::ActionData>();
+  action_data->action_type =
+      extensions::api::app_runtime::ActionType::ACTION_TYPE_NEW_NOTE;
+  action_data->is_lock_screen_action = base::MakeUnique<bool>(true);
+
+  apps::LaunchPlatformAppWithAction(lock_screen_profile_, app,
+                                    std::move(action_data), base::FilePath());
+  return true;
+}
+
+void AppManagerImpl::OnExtensionLoaded(content::BrowserContext* browser_context,
+                                       const extensions::Extension* extension) {
+  if (extension->id() ==
+      primary_profile_->GetPrefs()->GetString(prefs::kNoteTakingAppId)) {
+    OnNoteTakingExtensionChanged();
+  }
+}
+
+void AppManagerImpl::OnExtensionUnloaded(
+    content::BrowserContext* browser_context,
+    const extensions::Extension* extension,
+    extensions::UnloadedExtensionReason reason) {
+  if (extension->id() == lock_screen_app_id_)
+    OnNoteTakingExtensionChanged();
+}
+
+void AppManagerImpl::OnNoteTakingExtensionChanged() {
+  if (state_ == State::kInactive)
+    return;
+
+  std::string app_id = FindLockScreenNoteTakingApp();
+  if (app_id == lock_screen_app_id_)
+    return;
+
+  RemoveAppFromLockScreenProfile(lock_screen_app_id_);
+  lock_screen_app_id_.clear();
+
+  state_ = AddAppToLockScreenProfile(app_id);
+  if (state_ == State::kActive || state_ == State::kActivating)
+    lock_screen_app_id_ = app_id;
+
+  if (!note_taking_changed_callback_.is_null())
+    note_taking_changed_callback_.Run();
+}
+
+std::string AppManagerImpl::FindLockScreenNoteTakingApp() const {
+  // Note that lock screen does not currently support Android apps, so
+  // it's enough to only check the state of the preferred Chrome app.
+  std::unique_ptr<chromeos::NoteTakingAppInfo> note_taking_app =
+      chromeos::NoteTakingHelper::Get()->GetPreferredChromeAppInfo(
+          primary_profile_);
+
+  if (!note_taking_app ||
+      note_taking_app->lock_screen_support !=
+          chromeos::NoteTakingLockScreenSupport::kSelected) {
+    return std::string();
+  }
+
+  return note_taking_app->app_id;
+}
+
+AppManagerImpl::State AppManagerImpl::AddAppToLockScreenProfile(
+    const std::string& app_id) {
+  extensions::ExtensionRegistry* primary_registry =
+      extensions::ExtensionRegistry::Get(primary_profile_);
+  const extensions::Extension* app =
+      primary_registry->enabled_extensions().GetByID(app_id);
+  if (!app)
+    return State::kAppUnavailable;
+
+  bool is_unpacked = extensions::Manifest::IsUnpackedLocation(app->location());
+
+  // Unpacked apps in lock screen profile will be loaded from their original
+  // file path, so their path will be the same as the primary profile app's.
+  // For the rest, the app will be copied to a location in the lock screen
+  // profile's extension install directory (using |InstallExtensionCopy|) - the
+  // exact final path is not known at this point, and will be set as part of
+  // |InstallExtensionCopy|.
+  base::FilePath lock_profile_app_path =
+      is_unpacked ? app->path() : base::FilePath();
+
+  std::string error;
+  scoped_refptr<extensions::Extension> lock_profile_app =
+      extensions::Extension::Create(lock_profile_app_path, app->location(),
+                                    *app->manifest()->value()->CreateDeepCopy(),
+                                    app->creation_flags(), app->id(), &error);
+
+  // While extension creation can fail in general, in this case the lock screen
+  // profile extension creation arguments come from an app already installed in
+  // a user profile. If the extension parameters were invalid, the app would not
+  // exist in a user profile, and thus |app| would be nullptr, which is not the
+  // case at this point.
+  DCHECK(lock_profile_app);
+
+  install_count_++;
+
+  if (is_unpacked) {
+    InstallAndEnableLockScreenAppInLockScreenProfile(lock_profile_app.get());
+    return State::kActive;
+  }
+
+  ExtensionService* lock_screen_service =
+      extensions::ExtensionSystem::Get(lock_screen_profile_)
+          ->extension_service();
+
+  lock_screen_service->GetFileTaskRunner()->PostTask(
+      FROM_HERE,
+      base::Bind(
+          &InstallExtensionCopy, lock_profile_app, app->path(),
+          lock_screen_service->install_directory(), lock_screen_profile_,
+          base::Bind(&InvokeCallbackOnTaskRunner,
+                     base::Bind(&AppManagerImpl::CompleteLockScreenAppInstall,
+                                weak_ptr_factory_.GetWeakPtr(), install_count_),
+                     base::ThreadTaskRunnerHandle::Get())));
+  return State::kActivating;
+}
+
+void AppManagerImpl::CompleteLockScreenAppInstall(
+    int install_id,
+    const scoped_refptr<const extensions::Extension>& app) {
+  // Bail out if the app manager is no longer waiting for this app's
+  // installation - the copied resources will be cleaned up when the (ephemeral)
+  // lock screen profile is destroyed.
+  if (install_id != install_count_ || state_ != State::kActivating)
+    return;
+
+  if (app) {
+    DCHECK_EQ(lock_screen_app_id_, app->id());
+    InstallAndEnableLockScreenAppInLockScreenProfile(app.get());
+    state_ = State::kActive;
+  } else {
+    state_ = State::kAppUnavailable;
+  }
+
+  if (!note_taking_changed_callback_.is_null())
+    note_taking_changed_callback_.Run();
+}
+
+void AppManagerImpl::InstallAndEnableLockScreenAppInLockScreenProfile(
+    const extensions::Extension* app) {
+  ExtensionService* lock_screen_service =
+      extensions::ExtensionSystem::Get(lock_screen_profile_)
+          ->extension_service();
+
+  lock_screen_service->OnExtensionInstalled(
+      app, syncer::StringOrdinal(), extensions::kInstallFlagInstallImmediately);
+  lock_screen_service->EnableExtension(app->id());
+}
+
+void AppManagerImpl::RemoveAppFromLockScreenProfile(const std::string& app_id) {
+  if (app_id.empty())
+    return;
+
+  extensions::ExtensionRegistry* lock_screen_registry =
+      extensions::ExtensionRegistry::Get(lock_screen_profile_);
+  if (!lock_screen_registry->GetExtensionById(
+          app_id, extensions::ExtensionRegistry::EVERYTHING)) {
+    return;
+  }
+
+  base::string16 error;
+  extensions::ExtensionSystem::Get(lock_screen_profile_)
+      ->extension_service()
+      ->UninstallExtension(app_id,
+                           extensions::UNINSTALL_REASON_INTERNAL_MANAGEMENT,
+                           base::Bind(&base::DoNothing), &error);
 }
 
 }  // namespace lock_screen_apps
diff --git a/chrome/browser/chromeos/lock_screen_apps/app_manager_impl.h b/chrome/browser/chromeos/lock_screen_apps/app_manager_impl.h
index d1cd759..c47e485 100644
--- a/chrome/browser/chromeos/lock_screen_apps/app_manager_impl.h
+++ b/chrome/browser/chromeos/lock_screen_apps/app_manager_impl.h
@@ -5,16 +5,28 @@
 #ifndef CHROME_BROWSER_CHROMEOS_LOCK_SCREEN_APPS_APP_MANAGER_IMPL_H_
 #define CHROME_BROWSER_CHROMEOS_LOCK_SCREEN_APPS_APP_MANAGER_IMPL_H_
 
+#include <string>
+
 #include "base/callback.h"
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/scoped_observer.h"
 #include "chrome/browser/chromeos/lock_screen_apps/app_manager.h"
+#include "components/prefs/pref_change_registrar.h"
+#include "extensions/browser/extension_registry_observer.h"
 
 class Profile;
 
+namespace extensions {
+class Extension;
+class ExtensionRegistry;
+}  // namespace extensions
+
 namespace lock_screen_apps {
 
 // The default implementation of lock_screen_apps::AppManager.
-class AppManagerImpl : public AppManager {
+class AppManagerImpl : public AppManager,
+                       public extensions::ExtensionRegistryObserver {
  public:
   AppManagerImpl();
   ~AppManagerImpl() override;
@@ -28,12 +40,80 @@
   bool IsNoteTakingAppAvailable() const override;
   std::string GetNoteTakingAppId() const override;
 
+  // extensions::ExtensionRegistryObserver implementation:
+  void OnExtensionLoaded(content::BrowserContext* browser_context,
+                         const extensions::Extension* extension) override;
+  void OnExtensionUnloaded(content::BrowserContext* browser_context,
+                           const extensions::Extension* extension,
+                           extensions::UnloadedExtensionReason reason) override;
+
  private:
+  enum class State {
+    // The manager has not yet been initialized.
+    kNotInitialized,
+    // The manager is initialized, but not started. The note taking app is
+    // considered unset at this point, and cannot be launched.
+    kInactive,
+    // The manager is started. Lock screen note taking app, if set, is loaded
+    // and ready to be launched.
+    kActive,
+    // The manager is started, but app is still being installed into the lock
+    // screen apps profile.
+    kActivating,
+    // The manager is started, and there is no available lock screen enabled
+    // app.
+    kAppUnavailable,
+  };
+
+  // Called on UI thread when the lock screen app profile is initialized with
+  // lock screen app assets. It completes the app installation to the lock
+  // screen app profile.
+  // |app| - the installing app. Cann be nullptr in case the app assets
+  //     installation failed.
+  void CompleteLockScreenAppInstall(
+      int install_id,
+      const scoped_refptr<const extensions::Extension>& app);
+
+  // Installs app to the lock screen profile's extension service and enables
+  // the app.
+  void InstallAndEnableLockScreenAppInLockScreenProfile(
+      const extensions::Extension* app);
+
+  // Called when note taking related prefs change.
+  void OnNoteTakingExtensionChanged();
+
+  // Gets the currently enabled lock screen note taking app, is one is selected.
+  // If no such app exists, returns an empty string.
+  std::string FindLockScreenNoteTakingApp() const;
+
+  // Starts installing the lock screen note taking app to the lock screen
+  // profile.
+  // Returns the state to which the app manager should move as a result of this
+  // method.
+  State AddAppToLockScreenProfile(const std::string& app_id);
+
+  // Uninstalls lock screen note taking app from the lock screen profile.
+  void RemoveAppFromLockScreenProfile(const std::string& app_id);
+
   Profile* primary_profile_ = nullptr;
   Profile* lock_screen_profile_ = nullptr;
 
+  State state_ = State::kNotInitialized;
+  std::string lock_screen_app_id_;
+
+  PrefChangeRegistrar pref_change_registrar_;
+  ScopedObserver<extensions::ExtensionRegistry,
+                 extensions::ExtensionRegistryObserver>
+      extensions_observer_;
+
   base::Closure note_taking_changed_callback_;
 
+  // Counts app installs. Passed to app install callback as install request
+  // identifier to determine whether the completed install is stale.
+  int install_count_ = 0;
+
+  base::WeakPtrFactory<AppManagerImpl> weak_ptr_factory_;
+
   DISALLOW_COPY_AND_ASSIGN(AppManagerImpl);
 };
 
diff --git a/chrome/browser/chromeos/lock_screen_apps/app_manager_impl_unittest.cc b/chrome/browser/chromeos/lock_screen_apps/app_manager_impl_unittest.cc
new file mode 100644
index 0000000..e5d86ede9
--- /dev/null
+++ b/chrome/browser/chromeos/lock_screen_apps/app_manager_impl_unittest.cc
@@ -0,0 +1,966 @@
+// 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/chromeos/lock_screen_apps/app_manager_impl.h"
+
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/json/json_file_value_serializer.h"
+#include "base/memory/ptr_util.h"
+#include "base/test/scoped_command_line.h"
+#include "base/values.h"
+#include "chrome/browser/chromeos/arc/arc_session_manager.h"
+#include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h"
+#include "chrome/browser/chromeos/note_taking_helper.h"
+#include "chrome/browser/chromeos/settings/cros_settings.h"
+#include "chrome/browser/chromeos/settings/device_settings_service.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/test_extension_system.h"
+#include "chrome/common/chrome_constants.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/base/testing_browser_process.h"
+#include "chrome/test/base/testing_profile.h"
+#include "chrome/test/base/testing_profile_manager.h"
+#include "components/arc/arc_service_manager.h"
+#include "components/arc/arc_session.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "extensions/browser/event_router.h"
+#include "extensions/browser/event_router_factory.h"
+#include "extensions/browser/extension_prefs.h"
+#include "extensions/browser/extension_registry.h"
+#include "extensions/common/api/app_runtime.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/extension_builder.h"
+#include "extensions/common/value_builder.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using extensions::DictionaryBuilder;
+using extensions::ListBuilder;
+
+namespace lock_screen_apps {
+
+namespace {
+
+std::unique_ptr<arc::ArcSession> ArcSessionFactory() {
+  ADD_FAILURE() << "Attempt to create arc session.";
+  return nullptr;
+}
+
+class TestEventRouter : public extensions::EventRouter {
+ public:
+  explicit TestEventRouter(content::BrowserContext* context)
+      : extensions::EventRouter(context,
+                                extensions::ExtensionPrefs::Get(context)),
+        context_(context) {}
+  ~TestEventRouter() override = default;
+
+  bool ExtensionHasEventListener(const std::string& extension_id,
+                                 const std::string& event_name) const override {
+    return event_name == extensions::api::app_runtime::OnLaunched::kEventName;
+  }
+
+  void BroadcastEvent(std::unique_ptr<extensions::Event> event) override {}
+
+  void DispatchEventToExtension(
+      const std::string& extension_id,
+      std::unique_ptr<extensions::Event> event) override {
+    if (event->event_name !=
+        extensions::api::app_runtime::OnLaunched::kEventName) {
+      return;
+    }
+    ASSERT_TRUE(event->event_args);
+    const base::Value* arg_value = nullptr;
+    ASSERT_TRUE(event->event_args->Get(0, &arg_value));
+    ASSERT_TRUE(arg_value);
+    if (event->restrict_to_browser_context)
+      EXPECT_EQ(context_, event->restrict_to_browser_context);
+
+    std::unique_ptr<extensions::api::app_runtime::LaunchData> launch_data =
+        extensions::api::app_runtime::LaunchData::FromValue(*arg_value);
+    ASSERT_TRUE(launch_data);
+    ASSERT_TRUE(launch_data->action_data);
+    EXPECT_EQ(extensions::api::app_runtime::ACTION_TYPE_NEW_NOTE,
+              launch_data->action_data->action_type);
+    ASSERT_TRUE(launch_data->action_data->is_lock_screen_action);
+    EXPECT_TRUE(*launch_data->action_data->is_lock_screen_action);
+
+    launched_apps_.push_back(extension_id);
+  }
+
+  const std::vector<std::string>& launched_apps() const {
+    return launched_apps_;
+  }
+
+  void ClearLaunchedApps() { launched_apps_.clear(); }
+
+ private:
+  std::vector<std::string> launched_apps_;
+  content::BrowserContext* context_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestEventRouter);
+};
+
+std::unique_ptr<KeyedService> TestEventRouterFactoryFunction(
+    content::BrowserContext* profile) {
+  return base::MakeUnique<TestEventRouter>(profile);
+}
+
+enum class TestAppLocation { kUnpacked, kInternal };
+
+class LockScreenAppManagerImplTest
+    : public testing::TestWithParam<TestAppLocation> {
+ public:
+  LockScreenAppManagerImplTest()
+      : profile_manager_(TestingBrowserProcess::GetGlobal()) {}
+
+  ~LockScreenAppManagerImplTest() override = default;
+
+  void SetUp() override {
+    // Initialize command line so chromeos::NoteTakingHelper thinks note taking
+    // on lock screen is enabled.
+    command_line_ = base::MakeUnique<base::test::ScopedCommandLine>();
+    command_line_->GetProcessCommandLine()->InitFromArgv(
+        {"", "--enable-lock-screen-apps", "--force-enable-stylus-tools"});
+
+    ASSERT_TRUE(profile_manager_.SetUp());
+
+    profile_ = profile_manager_.CreateTestingProfile("primary_profile");
+
+    lock_screen_profile_ =
+        profile_manager_.CreateTestingProfile(chrome::kInitialProfile);
+
+    InitExtensionSystem(profile());
+    InitExtensionSystem(lock_screen_profile()->GetOriginalProfile());
+
+    // Initialize arc session manager - NoteTakingHelper expects it to be set.
+    arc_session_manager_ = base::MakeUnique<arc::ArcSessionManager>(
+        base::MakeUnique<arc::ArcSessionRunner>(
+            base::Bind(&ArcSessionFactory)));
+
+    chromeos::NoteTakingHelper::Initialize();
+
+    ResetAppManager();
+  }
+
+  void TearDown() override {
+    extensions::ExtensionSystem::Get(profile())->Shutdown();
+    extensions::ExtensionSystem::Get(lock_screen_profile())->Shutdown();
+    chromeos::NoteTakingHelper::Shutdown();
+  }
+
+  void InitExtensionSystem(Profile* profile) {
+    extensions::TestExtensionSystem* extension_system =
+        static_cast<extensions::TestExtensionSystem*>(
+            extensions::ExtensionSystem::Get(profile));
+    extension_system->CreateExtensionService(
+        base::CommandLine::ForCurrentProcess(),
+        profile->GetPath().Append("Extensions") /* install_directory */,
+        false /* autoupdate_enabled */);
+  }
+
+  base::FilePath GetTestAppSourcePath(TestAppLocation location,
+                                      Profile* profile,
+                                      const std::string& id,
+                                      const std::string& version) {
+    switch (location) {
+      case TestAppLocation::kUnpacked:
+        return profile->GetPath().Append("Downloads").Append("app");
+      case TestAppLocation::kInternal:
+        return extensions::ExtensionSystem::Get(profile)
+            ->extension_service()
+            ->install_directory()
+            .Append(id)
+            .Append(version);
+    }
+    return base::FilePath();
+  }
+
+  base::FilePath GetLockScreenAppPath(const std::string& id,
+                                      const std::string& version) {
+    return GetLockScreenAppPathWithOriginalProfile(profile(), id, version);
+  }
+
+  base::FilePath GetLockScreenAppPathWithOriginalProfile(
+      Profile* original_profile,
+      const std::string& id,
+      const std::string& version) {
+    return GetLockScreenAppPathWithOriginalLocation(
+        GetParam(), original_profile, id, version);
+  }
+
+  base::FilePath GetLockScreenAppPathWithOriginalLocation(
+      TestAppLocation location,
+      Profile* original_profile,
+      const std::string& id,
+      const std::string& version) {
+    switch (location) {
+      case TestAppLocation::kUnpacked:
+        return original_profile->GetPath().Append("Downloads").Append("app");
+      case TestAppLocation::kInternal:
+        return extensions::ExtensionSystem::Get(lock_screen_profile())
+            ->extension_service()
+            ->install_directory()
+            .Append(id)
+            .Append(version + "_0");
+    }
+    return base::FilePath();
+  }
+
+  extensions::Manifest::Location GetAppLocation(TestAppLocation location) {
+    switch (location) {
+      case TestAppLocation::kUnpacked:
+        return extensions::Manifest::UNPACKED;
+      case TestAppLocation::kInternal:
+        return extensions::Manifest::INTERNAL;
+    }
+
+    return extensions::Manifest::UNPACKED;
+  }
+
+  scoped_refptr<const extensions::Extension> CreateTestApp(
+      const std::string& id,
+      const std::string& version,
+      bool supports_lock_screen) {
+    return CreateTestAppInProfile(profile(), id, version, supports_lock_screen);
+  }
+
+  scoped_refptr<const extensions::Extension> CreateTestAppInProfile(
+      Profile* profile,
+      const std::string& id,
+      const std::string& version,
+      bool supports_lock_screen) {
+    return CreateTestAppWithLocation(GetParam(), profile, id, version,
+                                     supports_lock_screen);
+  }
+
+  scoped_refptr<const extensions::Extension> CreateTestAppWithLocation(
+      TestAppLocation location,
+      Profile* profile,
+      const std::string& id,
+      const std::string& version,
+      bool supports_lock_screen) {
+    std::unique_ptr<base::DictionaryValue> background =
+        DictionaryBuilder()
+            .Set("scripts", ListBuilder().Append("background.js").Build())
+            .Build();
+    std::unique_ptr<base::ListValue> action_handlers =
+        ListBuilder()
+            .Append(
+                DictionaryBuilder()
+                    .Set("action", "new_note")
+                    .SetBoolean("enabled_on_lock_screen", supports_lock_screen)
+                    .Build())
+            .Build();
+
+    DictionaryBuilder manifest_builder;
+    manifest_builder.Set("name", "Note taking app")
+        .Set("version", version)
+        .Set("manifest_version", 2)
+        .Set("app", DictionaryBuilder()
+                        .Set("background", std::move(background))
+                        .Build())
+        .Set("permissions", ListBuilder().Append("lockScreen").Build())
+        .Set("action_handlers", std::move(action_handlers));
+
+    base::FilePath extension_path =
+        GetTestAppSourcePath(location, profile, id, version);
+
+    scoped_refptr<const extensions::Extension> extension =
+        extensions::ExtensionBuilder()
+            .SetManifest(manifest_builder.Build())
+            .SetID(id)
+            .SetPath(extension_path)
+            .SetLocation(GetAppLocation(location))
+            .Build();
+
+    // Create the app path with required files - app manager *will* attempt to
+    // load the app from the disk, so extension directory has to be present for
+    // the load to succeed.
+    base::File::Error error;
+    if (!base::CreateDirectoryAndGetError(extension_path, &error)) {
+      ADD_FAILURE() << "Failed to create path " << extension_path.value() << " "
+                    << error;
+      return nullptr;
+    }
+
+    JSONFileValueSerializer manifest_writer(
+        extension_path.Append("manifest.json"));
+    if (!manifest_writer.Serialize(*extension->manifest()->value())) {
+      ADD_FAILURE() << "Failed to create manifest file";
+      return nullptr;
+    }
+
+    if (base::WriteFile(extension_path.Append("background.js"), "{}", 2) != 2) {
+      ADD_FAILURE() << "Failed to write background script file";
+      return nullptr;
+    }
+
+    return extension;
+  }
+
+  TestingProfile* CreateSecondaryProfile() {
+    TestingProfile* profile =
+        profile_manager_.CreateTestingProfile("secondary_profile");
+    InitExtensionSystem(profile);
+    return profile;
+  }
+
+  scoped_refptr<const extensions::Extension> AddTestAppWithLockScreenSupport(
+      Profile* profile,
+      const std::string& app_id,
+      const std::string& version,
+      bool enable_on_lock_screen) {
+    scoped_refptr<const extensions::Extension> app = CreateTestAppInProfile(
+        profile, app_id, version, true /* supports_lock_screen*/);
+    extensions::ExtensionSystem::Get(profile)
+        ->extension_service()
+        ->AddExtension(app.get());
+
+    chromeos::NoteTakingHelper::Get()->SetPreferredApp(profile, app_id);
+    profile->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
+                                    enable_on_lock_screen);
+    return app;
+  }
+
+  void InitializeAndStartAppManager(Profile* profile) {
+    app_manager()->Initialize(profile, lock_screen_profile());
+    app_manager()->Start(
+        base::Bind(&LockScreenAppManagerImplTest::OnNoteTakingChanged,
+                   base::Unretained(this)));
+  }
+
+  TestingProfile* profile() { return profile_; }
+  TestingProfile* lock_screen_profile() { return lock_screen_profile_; }
+
+  AppManager* app_manager() { return app_manager_.get(); }
+
+  void ResetAppManager() { app_manager_ = base::MakeUnique<AppManagerImpl>(); }
+
+  int note_taking_changed_count() const { return note_taking_changed_count_; }
+
+  void ResetNoteTakingChangedCount() { note_taking_changed_count_ = 0; }
+
+  // Waits for a round trip between file task runner used by the profile's
+  // extension service and the main thread - used to ensure that all pending
+  // file runner task finish,
+  void RunExtensionServiceTaskRunner(Profile* profile) {
+    base::RunLoop run_loop;
+    extensions::ExtensionSystem::Get(profile)
+        ->extension_service()
+        ->GetFileTaskRunner()
+        ->PostTaskAndReply(FROM_HERE, base::Bind(&base::DoNothing),
+                           run_loop.QuitClosure());
+    run_loop.Run();
+  }
+
+  bool IsInstallAsync() { return GetParam() != TestAppLocation::kUnpacked; }
+
+  int NoteTakingChangedCountOnStart() { return IsInstallAsync() ? 1 : 0; }
+
+ private:
+  void OnNoteTakingChanged() { ++note_taking_changed_count_; }
+
+  std::unique_ptr<base::test::ScopedCommandLine> command_line_;
+  content::TestBrowserThreadBundle threads_;
+
+  chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
+  chromeos::ScopedTestCrosSettings test_cros_settings_;
+  chromeos::ScopedTestUserManager user_manager_;
+
+  TestingProfileManager profile_manager_;
+  TestingProfile* profile_ = nullptr;
+  TestingProfile* lock_screen_profile_ = nullptr;
+
+  std::unique_ptr<arc::ArcServiceManager> arc_service_manager_;
+  std::unique_ptr<arc::ArcSessionManager> arc_session_manager_;
+
+  std::unique_ptr<AppManager> app_manager_;
+
+  int note_taking_changed_count_ = 0;
+
+  DISALLOW_COPY_AND_ASSIGN(LockScreenAppManagerImplTest);
+};
+
+}  // namespace
+
+INSTANTIATE_TEST_CASE_P(Unpacked,
+                        LockScreenAppManagerImplTest,
+                        ::testing::Values(TestAppLocation::kUnpacked));
+INSTANTIATE_TEST_CASE_P(Internal,
+                        LockScreenAppManagerImplTest,
+                        ::testing::Values(TestAppLocation::kInternal));
+
+TEST_P(LockScreenAppManagerImplTest, StartAddsAppToTarget) {
+  scoped_refptr<const extensions::Extension> note_taking_app =
+      AddTestAppWithLockScreenSupport(
+          profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
+          true /* enable_on_lock_screen */);
+
+  InitializeAndStartAppManager(profile());
+
+  EXPECT_EQ(0, note_taking_changed_count());
+  EXPECT_EQ(!IsInstallAsync(), app_manager()->IsNoteTakingAppAvailable());
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  EXPECT_EQ(NoteTakingChangedCountOnStart(), note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+
+  EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+            app_manager()->GetNoteTakingAppId());
+
+  EXPECT_TRUE(base::PathExists(note_taking_app->path()));
+
+  const extensions::Extension* lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::ENABLED);
+  ASSERT_TRUE(lock_app);
+
+  EXPECT_TRUE(base::PathExists(lock_app->path()));
+  EXPECT_EQ(GetLockScreenAppPath(note_taking_app->id(),
+                                 note_taking_app->VersionString()),
+            lock_app->path());
+
+  app_manager()->Stop();
+
+  EXPECT_EQ(0, note_taking_changed_count());
+  EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
+
+  lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::EVERYTHING);
+  EXPECT_FALSE(lock_app);
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+  RunExtensionServiceTaskRunner(profile());
+
+  EXPECT_TRUE(base::PathExists(note_taking_app->path()));
+}
+
+TEST_P(LockScreenAppManagerImplTest, StartWhenLockScreenNotesNotEnabled) {
+  scoped_refptr<const extensions::Extension> note_taking_app =
+      AddTestAppWithLockScreenSupport(
+          profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
+          false /* enable_on_lock_screen */);
+
+  InitializeAndStartAppManager(profile());
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  EXPECT_EQ(0, note_taking_changed_count());
+  EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
+
+  const extensions::Extension* lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::ENABLED);
+  EXPECT_FALSE(lock_app);
+
+  app_manager()->Stop();
+  EXPECT_EQ(0, note_taking_changed_count());
+  EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
+
+  lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::EVERYTHING);
+  EXPECT_FALSE(lock_app);
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+  RunExtensionServiceTaskRunner(profile());
+
+  EXPECT_TRUE(base::PathExists(note_taking_app->path()));
+}
+
+TEST_P(LockScreenAppManagerImplTest, LockScreenNoteTakingDisabledWhileStarted) {
+  scoped_refptr<const extensions::Extension> note_taking_app =
+      AddTestAppWithLockScreenSupport(
+          profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
+          true /* enable_on_lock_screen */);
+
+  InitializeAndStartAppManager(profile());
+
+  EXPECT_EQ(0, note_taking_changed_count());
+  EXPECT_EQ(!IsInstallAsync(), app_manager()->IsNoteTakingAppAvailable());
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  EXPECT_EQ(NoteTakingChangedCountOnStart(), note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+
+  EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+            app_manager()->GetNoteTakingAppId());
+
+  const extensions::Extension* lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::ENABLED);
+  ASSERT_TRUE(lock_app);
+
+  EXPECT_TRUE(base::PathExists(lock_app->path()));
+  EXPECT_EQ(GetLockScreenAppPath(note_taking_app->id(),
+                                 note_taking_app->VersionString()),
+            lock_app->path());
+  EXPECT_TRUE(base::PathExists(note_taking_app->path()));
+
+  profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
+                                    false);
+
+  EXPECT_EQ(1, note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+
+  EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
+  lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::EVERYTHING);
+  EXPECT_FALSE(lock_app);
+
+  app_manager()->Stop();
+
+  EXPECT_EQ(0, note_taking_changed_count());
+  EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+  RunExtensionServiceTaskRunner(profile());
+
+  EXPECT_TRUE(base::PathExists(note_taking_app->path()));
+}
+
+TEST_P(LockScreenAppManagerImplTest, LockScreenNoteTakingEnabledWhileStarted) {
+  scoped_refptr<const extensions::Extension> note_taking_app =
+      AddTestAppWithLockScreenSupport(
+          profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
+          false /* enable_on_lock_screen */);
+
+  InitializeAndStartAppManager(profile());
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  EXPECT_EQ(0, note_taking_changed_count());
+  EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
+
+  const extensions::Extension* lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::EVERYTHING);
+  EXPECT_FALSE(lock_app);
+
+  profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
+                                    true);
+
+  EXPECT_EQ(1, note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+  EXPECT_EQ(!IsInstallAsync(), app_manager()->IsNoteTakingAppAvailable());
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  EXPECT_EQ(NoteTakingChangedCountOnStart(), note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+
+  EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+            app_manager()->GetNoteTakingAppId());
+
+  lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::ENABLED);
+  ASSERT_TRUE(lock_app);
+
+  EXPECT_TRUE(base::PathExists(lock_app->path()));
+  EXPECT_EQ(GetLockScreenAppPath(note_taking_app->id(),
+                                 note_taking_app->VersionString()),
+            lock_app->path());
+  EXPECT_TRUE(base::PathExists(note_taking_app->path()));
+
+  app_manager()->Stop();
+
+  EXPECT_EQ(0, note_taking_changed_count());
+  EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+  RunExtensionServiceTaskRunner(profile());
+
+  EXPECT_TRUE(base::PathExists(note_taking_app->path()));
+}
+
+TEST_P(LockScreenAppManagerImplTest, LockScreenNoteTakingChangedWhileStarted) {
+  scoped_refptr<const extensions::Extension> dev_note_taking_app =
+      AddTestAppWithLockScreenSupport(
+          profile(), chromeos::NoteTakingHelper::kDevKeepExtensionId, "1.0",
+          false /* enable_on_lock_screen */);
+
+  scoped_refptr<const extensions::Extension> prod_note_taking_app =
+      AddTestAppWithLockScreenSupport(
+          profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
+          true /* enable_on_lock_screen */);
+
+  InitializeAndStartAppManager(profile());
+
+  EXPECT_EQ(0, note_taking_changed_count());
+  EXPECT_EQ(!IsInstallAsync(), app_manager()->IsNoteTakingAppAvailable());
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  EXPECT_EQ(NoteTakingChangedCountOnStart(), note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+
+  EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+            app_manager()->GetNoteTakingAppId());
+
+  const extensions::Extension* lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::ENABLED);
+  ASSERT_TRUE(lock_app);
+
+  EXPECT_TRUE(base::PathExists(lock_app->path()));
+  EXPECT_EQ(GetLockScreenAppPath(prod_note_taking_app->id(),
+                                 prod_note_taking_app->VersionString()),
+            lock_app->path());
+  EXPECT_TRUE(base::PathExists(prod_note_taking_app->path()));
+
+  chromeos::NoteTakingHelper::Get()->SetPreferredApp(
+      profile(), chromeos::NoteTakingHelper::kDevKeepExtensionId);
+
+  EXPECT_EQ(1, note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+  EXPECT_EQ(!IsInstallAsync(), app_manager()->IsNoteTakingAppAvailable());
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  EXPECT_EQ(NoteTakingChangedCountOnStart(), note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+
+  EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_EQ(chromeos::NoteTakingHelper::kDevKeepExtensionId,
+            app_manager()->GetNoteTakingAppId());
+
+  // Verify prod app was unloaded from signin profile.
+  lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::EVERYTHING);
+  EXPECT_FALSE(lock_app);
+
+  lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kDevKeepExtensionId,
+                             extensions::ExtensionRegistry::ENABLED);
+
+  ASSERT_TRUE(lock_app);
+
+  EXPECT_TRUE(base::PathExists(lock_app->path()));
+  EXPECT_EQ(GetLockScreenAppPath(dev_note_taking_app->id(),
+                                 dev_note_taking_app->VersionString()),
+            lock_app->path());
+
+  app_manager()->Stop();
+  EXPECT_EQ(0, note_taking_changed_count());
+  EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+  RunExtensionServiceTaskRunner(profile());
+
+  EXPECT_TRUE(base::PathExists(dev_note_taking_app->path()));
+  EXPECT_TRUE(base::PathExists(prod_note_taking_app->path()));
+}
+
+TEST_P(LockScreenAppManagerImplTest, LockScreenNoteTakingReloadedWhileStarted) {
+  scoped_refptr<const extensions::Extension> note_taking_app =
+      AddTestAppWithLockScreenSupport(
+          profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
+          true /* enable_on_lock_screen */);
+
+  InitializeAndStartAppManager(profile());
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  EXPECT_EQ(NoteTakingChangedCountOnStart(), note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+
+  EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+            app_manager()->GetNoteTakingAppId());
+
+  const extensions::Extension* lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::ENABLED);
+  ASSERT_TRUE(lock_app);
+  EXPECT_EQ("1.0", lock_app->VersionString());
+
+  EXPECT_TRUE(base::PathExists(lock_app->path()));
+  EXPECT_EQ(GetLockScreenAppPath(note_taking_app->id(),
+                                 note_taking_app->VersionString()),
+            lock_app->path());
+  EXPECT_TRUE(base::PathExists(note_taking_app->path()));
+
+  extensions::ExtensionSystem::Get(profile())
+      ->extension_service()
+      ->UnloadExtension(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                        extensions::UnloadedExtensionReason::UPDATE);
+
+  EXPECT_EQ(1, note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+
+  EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
+
+  // Verify prod app was unloaded from signin profile.
+  lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::EVERYTHING);
+  EXPECT_FALSE(lock_app);
+
+  // Add the app again.
+  note_taking_app = CreateTestApp(
+      chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1", true);
+  extensions::ExtensionSystem::Get(profile())
+      ->extension_service()
+      ->AddExtension(note_taking_app.get());
+
+  EXPECT_EQ(1, note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+  EXPECT_EQ(!IsInstallAsync(), app_manager()->IsNoteTakingAppAvailable());
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  EXPECT_EQ(NoteTakingChangedCountOnStart(), note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+  EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+            app_manager()->GetNoteTakingAppId());
+
+  lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::ENABLED);
+
+  ASSERT_TRUE(lock_app);
+  EXPECT_EQ("1.1", lock_app->VersionString());
+
+  EXPECT_TRUE(base::PathExists(lock_app->path()));
+  EXPECT_EQ(GetLockScreenAppPath(note_taking_app->id(),
+                                 note_taking_app->VersionString()),
+            lock_app->path());
+
+  app_manager()->Stop();
+  EXPECT_EQ(0, note_taking_changed_count());
+  EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+  RunExtensionServiceTaskRunner(profile());
+
+  EXPECT_TRUE(base::PathExists(note_taking_app->path()));
+}
+
+TEST_P(LockScreenAppManagerImplTest,
+       NoteTakingAppChangeToUnpackedWhileActivating) {
+  scoped_refptr<const extensions::Extension> initial_note_taking_app =
+      AddTestAppWithLockScreenSupport(
+          profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1",
+          true /* enable_on_lock_screen */);
+
+  scoped_refptr<const extensions::Extension> final_note_taking_app =
+      CreateTestAppWithLocation(TestAppLocation::kUnpacked, profile(),
+                                chromeos::NoteTakingHelper::kDevKeepExtensionId,
+                                "1.1", true /* enable_on_lock_screen */);
+  extensions::ExtensionSystem::Get(profile())
+      ->extension_service()
+      ->AddExtension(final_note_taking_app.get());
+
+  InitializeAndStartAppManager(profile());
+
+  EXPECT_EQ(0, note_taking_changed_count());
+  EXPECT_EQ(!IsInstallAsync(), app_manager()->IsNoteTakingAppAvailable());
+
+  chromeos::NoteTakingHelper::Get()->SetPreferredApp(
+      profile(), chromeos::NoteTakingHelper::kDevKeepExtensionId);
+
+  EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_EQ(chromeos::NoteTakingHelper::kDevKeepExtensionId,
+            app_manager()->GetNoteTakingAppId());
+  EXPECT_EQ(1, note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  EXPECT_EQ(0, note_taking_changed_count());
+
+  EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_EQ(chromeos::NoteTakingHelper::kDevKeepExtensionId,
+            app_manager()->GetNoteTakingAppId());
+
+  const extensions::Extension* lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kDevKeepExtensionId,
+                             extensions::ExtensionRegistry::ENABLED);
+  ASSERT_TRUE(lock_app);
+  EXPECT_EQ("1.1", lock_app->VersionString());
+
+  EXPECT_TRUE(base::PathExists(lock_app->path()));
+  EXPECT_EQ(
+      GetLockScreenAppPathWithOriginalLocation(
+          TestAppLocation::kUnpacked, profile(), final_note_taking_app->id(),
+          final_note_taking_app->VersionString()),
+      lock_app->path());
+
+  app_manager()->Stop();
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+  RunExtensionServiceTaskRunner(profile());
+
+  EXPECT_TRUE(base::PathExists(initial_note_taking_app->path()));
+  EXPECT_TRUE(base::PathExists(final_note_taking_app->path()));
+}
+
+TEST_P(LockScreenAppManagerImplTest,
+       NoteTakingAppChangeToInternalWhileActivating) {
+  scoped_refptr<const extensions::Extension> initial_note_taking_app =
+      AddTestAppWithLockScreenSupport(
+          profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1",
+          true /* enable_on_lock_screen */);
+
+  scoped_refptr<const extensions::Extension> final_note_taking_app =
+      CreateTestAppWithLocation(TestAppLocation::kInternal, profile(),
+                                chromeos::NoteTakingHelper::kDevKeepExtensionId,
+                                "1.1", true /* enable_on_lock_screen */);
+  extensions::ExtensionSystem::Get(profile())
+      ->extension_service()
+      ->AddExtension(final_note_taking_app.get());
+
+  InitializeAndStartAppManager(profile());
+
+  EXPECT_EQ(0, note_taking_changed_count());
+  EXPECT_EQ(!IsInstallAsync(), app_manager()->IsNoteTakingAppAvailable());
+
+  chromeos::NoteTakingHelper::Get()->SetPreferredApp(
+      profile(), chromeos::NoteTakingHelper::kDevKeepExtensionId);
+
+  EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_EQ(1, note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  EXPECT_EQ(1, note_taking_changed_count());
+  ResetNoteTakingChangedCount();
+
+  EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
+  EXPECT_EQ(chromeos::NoteTakingHelper::kDevKeepExtensionId,
+            app_manager()->GetNoteTakingAppId());
+
+  const extensions::Extension* lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kDevKeepExtensionId,
+                             extensions::ExtensionRegistry::ENABLED);
+  ASSERT_TRUE(lock_app);
+  EXPECT_EQ("1.1", lock_app->VersionString());
+
+  EXPECT_TRUE(base::PathExists(lock_app->path()));
+  EXPECT_EQ(
+      GetLockScreenAppPathWithOriginalLocation(
+          TestAppLocation::kInternal, profile(), final_note_taking_app->id(),
+          final_note_taking_app->VersionString()),
+      lock_app->path());
+
+  app_manager()->Stop();
+
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+  RunExtensionServiceTaskRunner(profile());
+
+  EXPECT_TRUE(base::PathExists(initial_note_taking_app->path()));
+  EXPECT_TRUE(base::PathExists(final_note_taking_app->path()));
+}
+
+TEST_P(LockScreenAppManagerImplTest, ShutdownWhenStarted) {
+  scoped_refptr<const extensions::Extension> note_taking_app =
+      AddTestAppWithLockScreenSupport(
+          profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1",
+          true /* enable_on_lock_screen */);
+
+  InitializeAndStartAppManager(profile());
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  const extensions::Extension* lock_app =
+      extensions::ExtensionRegistry::Get(lock_screen_profile())
+          ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+                             extensions::ExtensionRegistry::ENABLED);
+  EXPECT_TRUE(lock_app);
+}
+
+TEST_P(LockScreenAppManagerImplTest, LaunchAppWhenEnabled) {
+  TestEventRouter* event_router = static_cast<TestEventRouter*>(
+      extensions::EventRouterFactory::GetInstance()->SetTestingFactoryAndUse(
+          lock_screen_profile()->GetOriginalProfile(),
+          &TestEventRouterFactoryFunction));
+  ASSERT_TRUE(event_router);
+
+  scoped_refptr<const extensions::Extension> note_taking_app =
+      AddTestAppWithLockScreenSupport(
+          profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
+          true /* enable_on_lock_screen */);
+
+  InitializeAndStartAppManager(profile());
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  ASSERT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+            app_manager()->GetNoteTakingAppId());
+
+  EXPECT_TRUE(app_manager()->LaunchNoteTaking());
+
+  ASSERT_EQ(1u, event_router->launched_apps().size());
+  EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
+            event_router->launched_apps()[0]);
+  event_router->ClearLaunchedApps();
+
+  app_manager()->Stop();
+
+  EXPECT_FALSE(app_manager()->LaunchNoteTaking());
+  EXPECT_TRUE(event_router->launched_apps().empty());
+}
+
+TEST_P(LockScreenAppManagerImplTest, LaunchAppWhenNoLockScreenApp) {
+  TestEventRouter* event_router = static_cast<TestEventRouter*>(
+      extensions::EventRouterFactory::GetInstance()->SetTestingFactoryAndUse(
+          lock_screen_profile()->GetOriginalProfile(),
+          &TestEventRouterFactoryFunction));
+  ASSERT_TRUE(event_router);
+
+  scoped_refptr<const extensions::Extension> note_taking_app =
+      AddTestAppWithLockScreenSupport(
+          profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
+          false /* enable_on_lock_screen */);
+
+  InitializeAndStartAppManager(profile());
+  RunExtensionServiceTaskRunner(lock_screen_profile());
+
+  EXPECT_FALSE(app_manager()->LaunchNoteTaking());
+  EXPECT_TRUE(event_router->launched_apps().empty());
+
+  app_manager()->Stop();
+  EXPECT_FALSE(app_manager()->LaunchNoteTaking());
+  EXPECT_TRUE(event_router->launched_apps().empty());
+}
+
+}  // namespace lock_screen_apps
diff --git a/chrome/browser/chromeos/login/signin/merge_session_throttling_utils.cc b/chrome/browser/chromeos/login/signin/merge_session_throttling_utils.cc
index dbf95db..178b004 100644
--- a/chrome/browser/chromeos/login/signin/merge_session_throttling_utils.cc
+++ b/chrome/browser/chromeos/login/signin/merge_session_throttling_utils.cc
@@ -71,7 +71,7 @@
 }
 
 bool AreAllSessionMergedAlready() {
-  return !base::AtomicRefCountIsZero(&g_all_profiles_restored_);
+  return !g_all_profiles_restored_.IsZero();
 }
 
 void BlockProfile(Profile* profile) {
@@ -85,7 +85,7 @@
     // Since a new profile just got blocked, we can not assume that
     // all sessions are merged anymore.
     if (AreAllSessionMergedAlready()) {
-      base::AtomicRefCountDec(&g_all_profiles_restored_);
+      g_all_profiles_restored_.Decrement();
       DVLOG(1) << "Marking all sessions unmerged!";
     }
   }
@@ -100,7 +100,7 @@
 
   // Check if there is any other profile to block on.
   if (ProfileSet::Get()->size() == 0) {
-    base::AtomicRefCountInc(&g_all_profiles_restored_);
+    g_all_profiles_restored_.Increment();
     DVLOG(1) << "All profiles merged "
              << g_all_profiles_restored_.SubtleRefCountForDebug();
   }
@@ -116,7 +116,7 @@
     // This is not a regular user session, let's remove the throttle
     // permanently.
     if (!AreAllSessionMergedAlready())
-      base::AtomicRefCountInc(&g_all_profiles_restored_);
+      g_all_profiles_restored_.Increment();
 
     return false;
   }
diff --git a/chrome/browser/extensions/api/developer_private/extension_info_generator.cc b/chrome/browser/extensions/api/developer_private/extension_info_generator.cc
index b7ccaf6..3fd73208 100644
--- a/chrome/browser/extensions/api/developer_private/extension_info_generator.cc
+++ b/chrome/browser/extensions/api/developer_private/extension_info_generator.cc
@@ -397,7 +397,10 @@
       error_console_->IsReportingEnabledForExtension(extension.id());
 
   // File access.
-  info->file_access.is_enabled = extension.wants_file_access();
+  ManagementPolicy* management_policy = extension_system_->management_policy();
+  info->file_access.is_enabled =
+      extension.wants_file_access() &&
+      management_policy->UserMayModifySettings(&extension, nullptr);
   info->file_access.is_active =
       util::AllowFileAccess(extension.id(), browser_context_);
 
@@ -481,7 +484,6 @@
     }
   }
 
-  ManagementPolicy* management_policy = extension_system_->management_policy();
   info->must_remain_installed =
       management_policy->MustRemainInstalled(&extension, nullptr);
 
diff --git a/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc b/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc
index c7ac6c8b..e8989ac 100644
--- a/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc
+++ b/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc
@@ -121,7 +121,8 @@
 
   const scoped_refptr<const Extension> CreateExtension(
       const std::string& name,
-      std::unique_ptr<base::ListValue> permissions) {
+      std::unique_ptr<base::ListValue> permissions,
+      Manifest::Location location) {
     const std::string kId = crx_file::id_util::GenerateId(name);
     scoped_refptr<const Extension> extension =
         ExtensionBuilder()
@@ -132,7 +133,7 @@
                              .Set("version", "1.0.0")
                              .Set("permissions", std::move(permissions))
                              .Build())
-            .SetLocation(Manifest::INTERNAL)
+            .SetLocation(location)
             .SetID(kId)
             .Build();
 
@@ -383,9 +384,10 @@
                                         true));
   // Two extensions - one with all urls, one without.
   scoped_refptr<const Extension> all_urls_extension = CreateExtension(
-      "all_urls", ListBuilder().Append(kAllHostsPermission).Build());
+      "all_urls", ListBuilder().Append(kAllHostsPermission).Build(),
+      Manifest::INTERNAL);
   scoped_refptr<const Extension> no_urls_extension =
-      CreateExtension("no urls", ListBuilder().Build());
+      CreateExtension("no urls", ListBuilder().Build(), Manifest::INTERNAL);
 
   std::unique_ptr<developer::ExtensionInfo> info =
       GenerateExtensionInfo(all_urls_extension->id());
@@ -431,7 +433,8 @@
 
   // Load another extension with all urls (so permissions get re-init'd).
   all_urls_extension = CreateExtension(
-      "all_urls_II", ListBuilder().Append(kAllHostsPermission).Build());
+      "all_urls_II", ListBuilder().Append(kAllHostsPermission).Build(),
+      Manifest::INTERNAL);
 
   // Even though the extension has all_urls permission, the checkbox shouldn't
   // show up without the switch.
@@ -440,12 +443,30 @@
   EXPECT_TRUE(info->run_on_all_urls.is_active);
 }
 
+// Test that file:// access checkbox does not show up when the user can't
+// modify an extension's settings. https://crbug.com/173640.
+TEST_F(ExtensionInfoGeneratorUnitTest, ExtensionInfoLockedAllUrls) {
+  // Force installed extensions aren't user modifyable.
+  scoped_refptr<const Extension> locked_extension =
+      CreateExtension("locked", ListBuilder().Append("file://*/*").Build(),
+                      Manifest::EXTERNAL_POLICY_DOWNLOAD);
+
+  std::unique_ptr<developer::ExtensionInfo> info =
+      GenerateExtensionInfo(locked_extension->id());
+
+  // Extension wants file:// access but the checkbox will not appear
+  // in chrome://extensions.
+  EXPECT_TRUE(locked_extension->wants_file_access());
+  EXPECT_FALSE(info->file_access.is_enabled);
+  EXPECT_FALSE(info->file_access.is_active);
+}
+
 // Tests that blacklisted extensions are returned by the ExtensionInfoGenerator.
 TEST_F(ExtensionInfoGeneratorUnitTest, Blacklisted) {
-  const scoped_refptr<const Extension> extension1 =
-      CreateExtension("test1", base::WrapUnique(new base::ListValue()));
-  const scoped_refptr<const Extension> extension2 =
-      CreateExtension("test2", base::WrapUnique(new base::ListValue()));
+  const scoped_refptr<const Extension> extension1 = CreateExtension(
+      "test1", base::WrapUnique(new base::ListValue()), Manifest::INTERNAL);
+  const scoped_refptr<const Extension> extension2 = CreateExtension(
+      "test2", base::WrapUnique(new base::ListValue()), Manifest::INTERNAL);
 
   std::string id1 = extension1->id();
   std::string id2 = extension2->id();
diff --git a/chrome/browser/image_decoder.cc b/chrome/browser/image_decoder.cc
index b5706ce..632e86e 100644
--- a/chrome/browser/image_decoder.cc
+++ b/chrome/browser/image_decoder.cc
@@ -49,10 +49,10 @@
 }
 
 void RunDecodeCallbackOnTaskRunner(
-    const data_decoder::mojom::ImageDecoder::DecodeImageCallback& callback,
+    data_decoder::mojom::ImageDecoder::DecodeImageCallback callback,
     scoped_refptr<base::SequencedTaskRunner> task_runner,
     const SkBitmap& image) {
-  task_runner->PostTask(FROM_HERE, base::BindOnce(callback, image));
+  task_runner->PostTask(FROM_HERE, base::BindOnce(std::move(callback), image));
 }
 
 void DecodeImage(
@@ -60,7 +60,7 @@
     data_decoder::mojom::ImageCodec codec,
     bool shrink_to_fit,
     const gfx::Size& desired_image_frame_size,
-    const data_decoder::mojom::ImageDecoder::DecodeImageCallback& callback,
+    data_decoder::mojom::ImageDecoder::DecodeImageCallback callback,
     scoped_refptr<base::SequencedTaskRunner> callback_task_runner) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
 
@@ -69,10 +69,11 @@
       service_manager::Connector::Create(&connector_request);
   BindToBrowserConnector(std::move(connector_request));
 
-  data_decoder::DecodeImage(connector.get(), image_data, codec, shrink_to_fit,
-                            kMaxImageSizeInBytes, desired_image_frame_size,
-                            base::Bind(&RunDecodeCallbackOnTaskRunner, callback,
-                                       callback_task_runner));
+  data_decoder::DecodeImage(
+      connector.get(), image_data, codec, shrink_to_fit, kMaxImageSizeInBytes,
+      desired_image_frame_size,
+      base::BindOnce(&RunDecodeCallbackOnTaskRunner, std::move(callback),
+                     std::move(callback_task_runner)));
 }
 
 }  // namespace
diff --git a/chrome/browser/media/router/offscreen_presentation_manager.cc b/chrome/browser/media/router/offscreen_presentation_manager.cc
index 00b2835..02283715 100644
--- a/chrome/browser/media/router/offscreen_presentation_manager.cc
+++ b/chrome/browser/media/router/offscreen_presentation_manager.cc
@@ -21,32 +21,30 @@
 
 OffscreenPresentationManager::OffscreenPresentation*
 OffscreenPresentationManager::GetOrCreateOffscreenPresentation(
-    const std::string& presentation_id,
-    const GURL& presentation_url) {
-  auto it = offscreen_presentations_.find(presentation_id);
+    const content::PresentationInfo& presentation_info) {
+  auto it = offscreen_presentations_.find(presentation_info.presentation_id);
   if (it == offscreen_presentations_.end()) {
     it = offscreen_presentations_
-             .insert(std::make_pair(presentation_id,
-                                    base::MakeUnique<OffscreenPresentation>(
-                                        presentation_id, presentation_url)))
+             .insert(std::make_pair(
+                 presentation_info.presentation_id,
+                 base::MakeUnique<OffscreenPresentation>(presentation_info)))
              .first;
   }
   return it->second.get();
 }
 
 void OffscreenPresentationManager::RegisterOffscreenPresentationController(
-    const std::string& presentation_id,
-    const GURL& presentation_url,
+    const content::PresentationInfo& presentation_info,
     const RenderFrameHostId& render_frame_host_id,
     content::PresentationConnectionPtr controller_connection_ptr,
     content::PresentationConnectionRequest receiver_connection_request,
     const MediaRoute& route) {
-  DVLOG(2) << __FUNCTION__ << " [presentation_id]: " << presentation_id
+  DVLOG(2) << __func__
+           << " [presentation_id]: " << presentation_info.presentation_id
            << ", [render_frame_host_id]: " << render_frame_host_id.second;
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  auto* presentation =
-      GetOrCreateOffscreenPresentation(presentation_id, presentation_url);
+  auto* presentation = GetOrCreateOffscreenPresentation(presentation_info);
   presentation->RegisterController(
       render_frame_host_id, std::move(controller_connection_ptr),
       std::move(receiver_connection_request), route);
@@ -55,7 +53,7 @@
 void OffscreenPresentationManager::UnregisterOffscreenPresentationController(
     const std::string& presentation_id,
     const RenderFrameHostId& render_frame_host_id) {
-  DVLOG(2) << __FUNCTION__ << " [presentation_id]: " << presentation_id
+  DVLOG(2) << __func__ << " [presentation_id]: " << presentation_id
            << ", [render_frame_host_id]: " << render_frame_host_id.second;
   DCHECK(thread_checker_.CalledOnValidThread());
 
@@ -73,19 +71,18 @@
 }
 
 void OffscreenPresentationManager::OnOffscreenPresentationReceiverCreated(
-    const std::string& presentation_id,
-    const GURL& presentation_url,
+    const content::PresentationInfo& presentation_info,
     const content::ReceiverConnectionAvailableCallback& receiver_callback) {
-  DVLOG(2) << __FUNCTION__ << " [presentation_id]: " << presentation_id;
+  DVLOG(2) << __func__
+           << " [presentation_id]: " << presentation_info.presentation_id;
   DCHECK(thread_checker_.CalledOnValidThread());
-  auto* presentation =
-      GetOrCreateOffscreenPresentation(presentation_id, presentation_url);
+  auto* presentation = GetOrCreateOffscreenPresentation(presentation_info);
   presentation->RegisterReceiver(receiver_callback);
 }
 
 void OffscreenPresentationManager::OnOffscreenPresentationReceiverTerminated(
     const std::string& presentation_id) {
-  DVLOG(2) << __FUNCTION__ << " [presentation_id]: " << presentation_id;
+  DVLOG(2) << __func__ << " [presentation_id]: " << presentation_id;
   DCHECK(thread_checker_.CalledOnValidThread());
 
   offscreen_presentations_.erase(presentation_id);
@@ -107,9 +104,8 @@
 
 // OffscreenPresentation implementation.
 OffscreenPresentationManager::OffscreenPresentation::OffscreenPresentation(
-    const std::string& presentation_id,
-    const GURL& presentation_url)
-    : presentation_id_(presentation_id), presentation_url_(presentation_url) {}
+    const content::PresentationInfo& presentation_info)
+    : presentation_info_(presentation_info) {}
 
 OffscreenPresentationManager::OffscreenPresentation::~OffscreenPresentation() {}
 
@@ -119,10 +115,9 @@
     content::PresentationConnectionRequest receiver_connection_request,
     const MediaRoute& route) {
   if (!receiver_callback_.is_null()) {
-    receiver_callback_.Run(
-        content::PresentationInfo(presentation_url_, presentation_id_),
-        std::move(controller_connection_ptr),
-        std::move(receiver_connection_request));
+    receiver_callback_.Run(presentation_info_,
+                           std::move(controller_connection_ptr),
+                           std::move(receiver_connection_request));
   } else {
     pending_controllers_.insert(std::make_pair(
         render_frame_host_id, base::MakeUnique<ControllerConnection>(
@@ -144,7 +139,7 @@
 
   for (auto& controller : pending_controllers_) {
     receiver_callback.Run(
-        content::PresentationInfo(presentation_url_, presentation_id_),
+        presentation_info_,
         std::move(controller.second->controller_connection_ptr),
         std::move(controller.second->receiver_connection_request));
   }
diff --git a/chrome/browser/media/router/offscreen_presentation_manager.h b/chrome/browser/media/router/offscreen_presentation_manager.h
index 9871a58..bde4342 100644
--- a/chrome/browser/media/router/offscreen_presentation_manager.h
+++ b/chrome/browser/media/router/offscreen_presentation_manager.h
@@ -18,7 +18,9 @@
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/presentation_service_delegate.h"
 
-class GURL;
+namespace content {
+struct PresentationInfo;
+}
 
 namespace media_router {
 // Manages all offscreen presentations started in the associated Profile and
@@ -36,7 +38,7 @@
 //   OffscreenPresentationManager* manager =
 //       OffscreenPresentationManagerFactory::GetOrCreateForBrowserContext(
 //           web_contents_->GetBrowserContext());
-//   manager->OnOffscreenPresentationReceiverCreated(presentation_id,
+//   manager->OnOffscreenPresentationReceiverCreated(presentation_info,
 //       base::Bind(&PresentationServiceImpl::OnReceiverConnectionAvailable));
 //
 // Controlling frame establishes connection with the receiver side, resulting
@@ -46,8 +48,9 @@
 // PresentationServiceImpl::OnReceiverConnectionAvailable.
 //
 //   manager->RegisterOffscreenPresentationController(
-//       presentation_id, controller_frame_id, controller_connection_ptr,
-//       receiver_connection_request);
+//       presentation_info,
+//       std::move(controller_connection_ptr,
+//       std::move(receiver_connection_request));
 //
 // Invoked on receiver's PresentationServiceImpl when controller connection is
 // established.
@@ -77,8 +80,9 @@
 //   |message|: Text message to be sent.
 //   PresentationConnctionPtr::SendString(
 //       const blink::WebString& message) {
-//     target_connection_->OnConnectionMessageReceived(
-//         std::move(connection_message));
+//     target_connection_->OnMessage(
+//         content::PresentationConnectionMessage(message.Utf8()),
+//         base::Bind(&OnMessageReceived));
 //   }
 //
 // A controller or receiver leaves the offscreen presentation (e.g., due to
@@ -109,8 +113,7 @@
   // this class. Ownership is transferred to presentation receiver via
   // |receiver_callback| passed below.
   virtual void RegisterOffscreenPresentationController(
-      const std::string& presentation_id,
-      const GURL& presentation_url,
+      const content::PresentationInfo& presentation_info,
       const RenderFrameHostId& render_frame_id,
       content::PresentationConnectionPtr controller_connection_ptr,
       content::PresentationConnectionRequest receiver_connection_request,
@@ -125,11 +128,9 @@
       const std::string& presentation_id,
       const RenderFrameHostId& render_frame_id);
 
-  // Registers |receiver_callback| to presentation with |presentation_id| and
-  // |presentation_url|.
+  // Registers |receiver_callback| to presentation with |presentation_info|.
   virtual void OnOffscreenPresentationReceiverCreated(
-      const std::string& presentation_id,
-      const GURL& presentation_url,
+      const content::PresentationInfo& presentation_info,
       const content::ReceiverConnectionAvailableCallback& receiver_callback);
 
   // Unregisters ReceiverConnectionAvailableCallback associated with
@@ -153,8 +154,8 @@
   // receiver.
   class OffscreenPresentation {
    public:
-    OffscreenPresentation(const std::string& presentation_id,
-                          const GURL& presentation_url);
+    explicit OffscreenPresentation(
+        const content::PresentationInfo& presentation_info);
     ~OffscreenPresentation();
 
     // Register controller with |render_frame_id|. If |receiver_callback_| has
@@ -188,8 +189,7 @@
     // controllers.
     bool IsValid() const;
 
-    const std::string presentation_id_;
-    const GURL presentation_url_;
+    const content::PresentationInfo presentation_info_;
     base::Optional<MediaRoute> route_;
 
     // Callback to invoke whenever a receiver connection is available.
@@ -234,11 +234,9 @@
   using OffscreenPresentationMap =
       std::map<std::string, std::unique_ptr<OffscreenPresentation>>;
 
-  // Creates an offscreen presentation with |presentation_id| and
-  // |presentation_url|.
+  // Creates an offscreen presentation with |presentation_info|.
   OffscreenPresentation* GetOrCreateOffscreenPresentation(
-      const std::string& presentation_id,
-      const GURL& presentation_url);
+      const content::PresentationInfo& presentation_info);
 
   // Maps from presentation ID to OffscreenPresentation.
   OffscreenPresentationMap offscreen_presentations_;
diff --git a/chrome/browser/media/router/offscreen_presentation_manager_unittest.cc b/chrome/browser/media/router/offscreen_presentation_manager_unittest.cc
index 3111997..892a39e 100644
--- a/chrome/browser/media/router/offscreen_presentation_manager_unittest.cc
+++ b/chrome/browser/media/router/offscreen_presentation_manager_unittest.cc
@@ -40,7 +40,7 @@
  public:
   OffscreenPresentationManagerTest()
       : render_frame_host_id_(1, 1),
-        presentation_url_(kPresentationUrl),
+        presentation_info_(GURL(kPresentationUrl), kPresentationId),
         route_("route_1",
                MediaSource("source_1"),
                "sink_1",
@@ -65,25 +65,29 @@
 
   void RegisterController(const std::string& presentation_id,
                           content::PresentationConnectionPtr controller) {
-    content::PresentationConnectionRequest receiver_conn_request;
-    manager()->RegisterOffscreenPresentationController(
-        presentation_id, presentation_url_, render_frame_host_id_,
-        std::move(controller), std::move(receiver_conn_request), route_);
+    RegisterController(
+        content::PresentationInfo(GURL(kPresentationUrl), presentation_id),
+        render_frame_host_id_, std::move(controller));
   }
 
   void RegisterController(const RenderFrameHostId& render_frame_id,
                           content::PresentationConnectionPtr controller) {
-    content::PresentationConnectionRequest receiver_conn_request;
-    manager()->RegisterOffscreenPresentationController(
-        kPresentationId, presentation_url_, render_frame_id,
-        std::move(controller), std::move(receiver_conn_request), route_);
+    RegisterController(presentation_info_, render_frame_id,
+                       std::move(controller));
   }
 
   void RegisterController(content::PresentationConnectionPtr controller) {
+    RegisterController(presentation_info_, render_frame_host_id_,
+                       std::move(controller));
+  }
+
+  void RegisterController(const content::PresentationInfo& presentation_info,
+                          const RenderFrameHostId& render_frame_id,
+                          content::PresentationConnectionPtr controller) {
     content::PresentationConnectionRequest receiver_conn_request;
     manager()->RegisterOffscreenPresentationController(
-        kPresentationId, presentation_url_, render_frame_host_id_,
-        std::move(controller), std::move(receiver_conn_request), route_);
+        presentation_info, render_frame_id, std::move(controller),
+        std::move(receiver_conn_request), route_);
   }
 
   void RegisterReceiver(
@@ -95,7 +99,7 @@
       const std::string& presentation_id,
       MockReceiverConnectionAvailableCallback& receiver_callback) {
     manager()->OnOffscreenPresentationReceiverCreated(
-        presentation_id, presentation_url_,
+        content::PresentationInfo(GURL(kPresentationUrl), presentation_id),
         base::Bind(&MockReceiverConnectionAvailableCallback::
                        OnReceiverConnectionAvailable,
                    base::Unretained(&receiver_callback)));
@@ -117,7 +121,7 @@
 
  private:
   const RenderFrameHostId render_frame_host_id_;
-  GURL presentation_url_;
+  const content::PresentationInfo presentation_info_;
   OffscreenPresentationManager manager_;
   MediaRoute route_;
 };
diff --git a/chrome/browser/media/router/presentation_service_delegate_impl.cc b/chrome/browser/media/router/presentation_service_delegate_impl.cc
index 1f9262c..5520260 100644
--- a/chrome/browser/media/router/presentation_service_delegate_impl.cc
+++ b/chrome/browser/media/router/presentation_service_delegate_impl.cc
@@ -289,8 +289,8 @@
         OffscreenPresentationManagerFactory::GetOrCreateForWebContents(
             web_contents_);
     offscreen_presentation_manager->RegisterOffscreenPresentationController(
-        presentation_info.presentation_id, presentation_info.presentation_url,
-        render_frame_host_id_, std::move(controller_connection_ptr),
+        presentation_info, render_frame_host_id_,
+        std::move(controller_connection_ptr),
         std::move(receiver_connection_request), pid_route_it->second);
   } else {
     DVLOG(2)
diff --git a/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc b/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc
index 8730723..c18a5cec 100644
--- a/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc
+++ b/chrome/browser/media/router/presentation_service_delegate_impl_unittest.cc
@@ -43,6 +43,12 @@
     "https://google.com/cast#__castAppId__=233637DE";
 const char kFrameUrl[] = "http://anotherframeurl.fakeurl.com/";
 
+// Matches content::PresentationInfo.
+MATCHER_P(InfoEquals, expected, "") {
+  return expected.presentation_url == arg.presentation_url &&
+         expected.presentation_id == arg.presentation_id;
+}
+
 }  // namespace
 
 namespace media_router {
@@ -74,27 +80,24 @@
 class MockOffscreenPresentationManager : public OffscreenPresentationManager {
  public:
   void RegisterOffscreenPresentationController(
-      const std::string& presentation_id,
-      const GURL& presentation_url,
+      const content::PresentationInfo& presentation_info,
       const RenderFrameHostId& render_frame_id,
       content::PresentationConnectionPtr controller,
       content::PresentationConnectionRequest,
       const MediaRoute& route) override {
-    RegisterOffscreenPresentationController(presentation_id, presentation_url,
-                                            render_frame_id, route);
+    RegisterOffscreenPresentationController(presentation_info, render_frame_id,
+                                            route);
   }
 
-  MOCK_METHOD4(RegisterOffscreenPresentationController,
-               void(const std::string& presentation_id,
-                    const GURL& presentation_url,
+  MOCK_METHOD3(RegisterOffscreenPresentationController,
+               void(const content::PresentationInfo& presentation_info,
                     const RenderFrameHostId& render_frame_id,
                     const MediaRoute& route));
   MOCK_METHOD2(UnregisterOffscreenPresentationController,
                void(const std::string& presentation_id,
                     const RenderFrameHostId& render_frame_id));
-  MOCK_METHOD3(OnOffscreenPresentationReceiverCreated,
-               void(const std::string& presentation_id,
-                    const GURL& presentation_url,
+  MOCK_METHOD2(OnOffscreenPresentationReceiverCreated,
+               void(const content::PresentationInfo& presentation_info,
                     const content::ReceiverConnectionAvailableCallback&
                         receiver_callback));
   MOCK_METHOD1(OnOffscreenPresentationReceiverTerminated,
@@ -614,7 +617,7 @@
   auto& mock_offscreen_manager = GetMockOffscreenPresentationManager();
   EXPECT_CALL(mock_offscreen_manager,
               RegisterOffscreenPresentationController(
-                  presentation_id, presentation_url,
+                  InfoEquals(presentation_info),
                   RenderFrameHostId(render_process_id, render_frame_id),
                   Equals(media_route)));
 
diff --git a/chrome/browser/media/router/receiver_presentation_service_delegate_impl.cc b/chrome/browser/media/router/receiver_presentation_service_delegate_impl.cc
index cbaf4b4..71985066 100644
--- a/chrome/browser/media/router/receiver_presentation_service_delegate_impl.cc
+++ b/chrome/browser/media/router/receiver_presentation_service_delegate_impl.cc
@@ -69,7 +69,8 @@
         const content::ReceiverConnectionAvailableCallback&
             receiver_available_callback) {
   offscreen_presentation_manager_->OnOffscreenPresentationReceiverCreated(
-      presentation_id_, web_contents_->GetLastCommittedURL(),
+      content::PresentationInfo(web_contents_->GetLastCommittedURL(),
+                                presentation_id_),
       receiver_available_callback);
 }
 
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc
index 721b052..5224097 100644
--- a/chrome/browser/metrics/chrome_metrics_service_client.cc
+++ b/chrome/browser/metrics/chrome_metrics_service_client.cc
@@ -27,8 +27,8 @@
 #include "base/rand_util.h"
 #include "base/strings/string16.h"
 #include "base/task_scheduler/post_task.h"
+#include "base/task_scheduler/task_traits.h"
 #include "base/threading/platform_thread.h"
-#include "base/threading/sequenced_worker_pool.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
@@ -179,7 +179,6 @@
     const base::FilePath& dir,
     base::StringPiece metrics_name,
     metrics::FileMetricsProvider::SourceAssociation association,
-    scoped_refptr<base::TaskRunner> task_runner,
     metrics::FileMetricsProvider* file_metrics_provider) {
   base::FilePath metrics_file;
   base::GlobalHistogramAllocator::ConstructFilePaths(
@@ -194,25 +193,20 @@
   } else {
     // When metrics reporting is not enabled, any existing file should be
     // deleted in order to preserve user privacy.
-    task_runner->PostTask(FROM_HERE,
-                          base::BindOnce(base::IgnoreResult(&base::DeleteFile),
-                                         metrics_file, /*recursive=*/false));
+    base::PostTaskWithTraits(
+        FROM_HERE,
+        {base::MayBlock(), base::TaskPriority::BACKGROUND,
+         base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+        base::BindOnce(base::IgnoreResult(&base::DeleteFile), metrics_file,
+                       /*recursive=*/false));
   }
 }
 
 std::unique_ptr<metrics::FileMetricsProvider> CreateFileMetricsProvider(
     bool metrics_reporting_enabled) {
-  // Fetch a worker-pool for performing I/O tasks that are not allowed on
-  // the main UI thread.
-  scoped_refptr<base::TaskRunner> task_runner =
-      content::BrowserThread::GetBlockingPool()
-          ->GetTaskRunnerWithShutdownBehavior(
-              base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
-
   // Create an object to monitor files of metrics and include them in reports.
   std::unique_ptr<metrics::FileMetricsProvider> file_metrics_provider(
-      new metrics::FileMetricsProvider(task_runner,
-                                       g_browser_process->local_state()));
+      new metrics::FileMetricsProvider(g_browser_process->local_state()));
 
   base::FilePath user_data_dir;
   if (base::PathService::Get(chrome::DIR_USER_DATA, &user_data_dir)) {
@@ -224,7 +218,7 @@
         kCrashpadHistogramAllocatorName,
         metrics::FileMetricsProvider::
             ASSOCIATE_INTERNAL_PROFILE_OR_PREVIOUS_RUN,
-        task_runner, file_metrics_provider.get());
+        file_metrics_provider.get());
 
     base::FilePath browser_metrics_upload_dir = user_data_dir.AppendASCII(
         ChromeMetricsServiceClient::kBrowserMetricsName);
diff --git a/chrome/browser/net/errorpage_browsertest.cc b/chrome/browser/net/errorpage_browsertest.cc
index 2c0174e..cbddad7 100644
--- a/chrome/browser/net/errorpage_browsertest.cc
+++ b/chrome/browser/net/errorpage_browsertest.cc
@@ -58,6 +58,8 @@
 #include "net/http/failing_http_transaction_factory.h"
 #include "net/http/http_cache.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
+#include "net/test/embedded_test_server/http_request.h"
+#include "net/test/embedded_test_server/http_response.h"
 #include "net/test/url_request/url_request_failed_job.h"
 #include "net/test/url_request/url_request_mock_http_job.h"
 #include "net/url_request/url_request_context.h"
@@ -323,6 +325,18 @@
           root_http.AppendASCII("title3.html")));
 }
 
+// When it sees a request for |path|, returns a 500 response with a body that
+// will be sniffed as binary/octet-stream.
+std::unique_ptr<net::test_server::HttpResponse> Return500WithBinaryBody(
+    const std::string& path,
+    const net::test_server::HttpRequest& request) {
+  if (path != request.relative_url)
+    return nullptr;
+  return std::unique_ptr<net::test_server::HttpResponse>(
+      new net::test_server::RawHttpResponse("HTTP/1.1 500 Server Sad :(",
+                                            "\x01"));
+}
+
 class ErrorPageTest : public InProcessBrowserTest {
  public:
   enum HistoryNavigationDirection {
@@ -1557,4 +1571,20 @@
   EXPECT_TRUE(IsDisplayingText(browser(), kHttp09Response));
 }
 
+// Checks that when an HTTP error page is sniffed as a download, an error page
+// is displayed. This tests the particular case in which the response body
+// is small enough that the entire response must be read before its MIME type
+// can be determined.
+IN_PROC_BROWSER_TEST_F(ErrorPageTest, SniffSmallHttpErrorResponseAsDownload) {
+  const char kErrorPath[] = "/foo";
+  embedded_test_server()->RegisterRequestHandler(
+      base::Bind(&Return500WithBinaryBody, kErrorPath));
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  ui_test_utils::NavigateToURL(browser(),
+                               embedded_test_server()->GetURL(kErrorPath));
+
+  ExpectDisplayingLocalErrorPage(browser(), net::ERR_INVALID_RESPONSE);
+}
+
 }  // namespace
diff --git a/chrome/browser/offline_pages/background_loader_offliner.cc b/chrome/browser/offline_pages/background_loader_offliner.cc
index a4960c1d..475fa024 100644
--- a/chrome/browser/offline_pages/background_loader_offliner.cc
+++ b/chrome/browser/offline_pages/background_loader_offliner.cc
@@ -454,6 +454,7 @@
   params.proposed_offline_id = request.request_id();
   params.is_background = true;
   params.use_page_problem_detectors = true;
+  params.request_origin = request.request_origin();
 
   // Pass in the original URL if it's different from last committed
   // when redirects occur.
diff --git a/chrome/browser/offline_pages/background_loader_offliner_unittest.cc b/chrome/browser/offline_pages/background_loader_offliner_unittest.cc
index 52af0056..3bc1e71 100644
--- a/chrome/browser/offline_pages/background_loader_offliner_unittest.cc
+++ b/chrome/browser/offline_pages/background_loader_offliner_unittest.cc
@@ -42,6 +42,7 @@
 const GURL kFileUrl("file://salmon.png");
 const ClientId kClientId("async_loading", "88");
 const bool kUserRequested = true;
+const char kRequestOrigin[] = "abc.xyz";
 
 class TestLoadTerminationListener : public LoadTerminationListener {
  public:
@@ -67,6 +68,7 @@
                 const SavePageCallback& callback) override {
     mock_saving_ = true;
     save_page_callback_ = callback;
+    save_page_params_ = save_page_params;
   }
 
   void CompleteSavingAsArchiveCreationFailed() {
@@ -101,11 +103,13 @@
 
   bool mock_saving() const { return mock_saving_; }
   bool mock_deleting() const { return mock_deleting_; }
+  SavePageParams& save_page_params() { return save_page_params_; }
 
  private:
   bool mock_saving_;
   bool mock_deleting_;
   SavePageCallback save_page_callback_;
+  SavePageParams save_page_params_;
 
   DISALLOW_COPY_AND_ASSIGN(MockOfflinePageModel);
 };
@@ -348,10 +352,13 @@
   base::Time creation_time = base::Time::Now();
   SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time,
                           kUserRequested);
+  request.set_request_origin(kRequestOrigin);
   EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(),
                                       progress_callback()));
   CompleteLoading();
   PumpLoop();
+  // Verify that request origin is propagated.
+  EXPECT_EQ(kRequestOrigin, model()->save_page_params().request_origin);
   EXPECT_FALSE(completion_callback_called());
   EXPECT_TRUE(SaveInProgress());
   EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status());
diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc
index e83ed8ce..87eb3d8 100644
--- a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc
+++ b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc
@@ -6,11 +6,13 @@
 
 #include <memory>
 #include <string>
+#include <utility>
 
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
+#include "chrome/test/base/testing_browser_process.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/web_contents.h"
@@ -52,12 +54,13 @@
 }  // namespace
 
 PageLoadMetricsObserverTestHarness::PageLoadMetricsObserverTestHarness()
-    : ChromeRenderViewHostTestHarness() {}
+    : ChromeRenderViewHostTestHarness(), ukm_tester_(&test_ukm_recorder_) {}
 
 PageLoadMetricsObserverTestHarness::~PageLoadMetricsObserverTestHarness() {}
 
 void PageLoadMetricsObserverTestHarness::SetUp() {
   ChromeRenderViewHostTestHarness::SetUp();
+  TestingBrowserProcess::GetGlobal()->SetUkmRecorder(&test_ukm_recorder_);
   SetContents(CreateTestWebContents());
   NavigateAndCommit(GURL("http://www.google.com"));
   observer_ = MetricsWebContentsObserver::CreateForWebContents(
diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h
index d6ac103..3702e0c 100644
--- a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h
+++ b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h
@@ -9,10 +9,12 @@
 #include "base/test/histogram_tester.h"
 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
 #include "chrome/browser/page_load_metrics/page_load_tracker.h"
+#include "chrome/browser/page_load_metrics/test/ukm_tester.h"
 #include "chrome/common/page_load_metrics/test/page_load_metrics_test_util.h"
 #include "chrome/common/page_load_metrics/test/weak_mock_timer.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "components/ukm/test_ukm_recorder.h"
 #include "content/public/browser/global_request_id.h"
 #include "content/public/test/web_contents_tester.h"
 #include "third_party/WebKit/public/platform/WebInputEvent.h"
@@ -86,8 +88,14 @@
   // Gets the PageLoadExtraInfo for the committed_load_ in observer_.
   const PageLoadExtraInfo GetPageLoadExtraInfoForCommittedLoad();
 
+  const page_load_metrics::test::UkmTester& ukm_tester() const {
+    return ukm_tester_;
+  }
+
  private:
   base::HistogramTester histogram_tester_;
+  ukm::TestUkmRecorder test_ukm_recorder_;
+  page_load_metrics::test::UkmTester ukm_tester_;
   MetricsWebContentsObserver* observer_;
 
   DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsObserverTestHarness);
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
index d71a3de..f81a7aa 100644
--- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
@@ -9,8 +9,6 @@
 #include "base/optional.h"
 #include "base/time/time.h"
 #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h"
-#include "chrome/test/base/testing_browser_process.h"
-#include "components/ukm/test_ukm_recorder.h"
 #include "components/ukm/ukm_source.h"
 #include "net/nqe/effective_connection_type.h"
 #include "net/nqe/network_quality_provider.h"
@@ -57,89 +55,19 @@
     EXPECT_CALL(mock_network_quality_provider_, GetTransportRTT())
         .Times(AnyNumber())
         .WillRepeatedly(Return(base::Optional<base::TimeDelta>()));
-
-    TestingBrowserProcess::GetGlobal()->SetUkmRecorder(&test_ukm_recorder_);
   }
 
-  size_t ukm_source_count() { return test_ukm_recorder_.sources_count(); }
-
-  size_t ukm_entry_count() { return test_ukm_recorder_.entries_count(); }
-
   MockNetworkQualityProvider& mock_network_quality_provider() {
     return mock_network_quality_provider_;
   }
 
-  const ukm::UkmSource* GetUkmSourceForUrl(const char* url) {
-    return test_ukm_recorder_.GetSourceForUrl(url);
-  }
-
-  const ukm::mojom::UkmEntry* GetUkmEntry(size_t entry_index) {
-    return test_ukm_recorder_.GetEntry(entry_index);
-  }
-
-  std::vector<const ukm::mojom::UkmEntry*> GetUkmEntriesForSourceID(
-      ukm::SourceId source_id) {
-    std::vector<const ukm::mojom::UkmEntry*> entries;
-    for (size_t i = 0; i < ukm_entry_count(); ++i) {
-      const ukm::mojom::UkmEntry* entry = GetUkmEntry(i);
-      if (entry->source_id == source_id)
-        entries.push_back(entry);
-    }
-    return entries;
-  }
-
-  // Provides a single merged ukm::mojom::UkmEntry proto that contains all
-  // metrics from the given |entries|. |entries| must be non-empty, and all
-  // |entries| must have the same |source_id| and |event_hash|.
-  ukm::mojom::UkmEntryPtr GetMergedEntry(
-      const std::vector<const ukm::mojom::UkmEntry*>& entries) {
-    EXPECT_FALSE(entries.empty());
-    ukm::mojom::UkmEntryPtr merged_entry = ukm::mojom::UkmEntry::New();
-    for (const auto* entry : entries) {
-      if (merged_entry->event_hash) {
-        EXPECT_EQ(merged_entry->source_id, entry->source_id);
-        EXPECT_EQ(merged_entry->event_hash, entry->event_hash);
-      } else {
-        merged_entry->event_hash = entry->event_hash;
-        merged_entry->source_id = entry->source_id;
-      }
-      for (const auto& metric : entry->metrics) {
-        merged_entry->metrics.emplace_back(metric->Clone());
-      }
-    }
-    return merged_entry;
-  }
-
-  ukm::mojom::UkmEntryPtr GetMergedEntryForSourceID(ukm::SourceId source_id) {
-    ukm::mojom::UkmEntryPtr entry =
-        GetMergedEntry(GetUkmEntriesForSourceID(source_id));
-    EXPECT_EQ(source_id, entry->source_id);
-    EXPECT_NE(0UL, entry->event_hash);
-    return entry;
-  }
-
-  static bool HasMetric(const char* name,
-                        const ukm::mojom::UkmEntry* entry) WARN_UNUSED_RESULT {
-    return ukm::TestUkmRecorder::FindMetric(entry, name) != nullptr;
-  }
-
-  static void ExpectMetric(const char* name,
-                           int64_t expected_value,
-                           const ukm::mojom::UkmEntry* entry) {
-    const ukm::mojom::UkmMetric* metric =
-        ukm::TestUkmRecorder::FindMetric(entry, name);
-    EXPECT_NE(nullptr, metric) << "Failed to find metric: " << name;
-    EXPECT_EQ(expected_value, metric->value);
-  }
-
  private:
   MockNetworkQualityProvider mock_network_quality_provider_;
-  ukm::TestUkmRecorder test_ukm_recorder_;
 };
 
 TEST_F(UkmPageLoadMetricsObserverTest, NoMetrics) {
-  EXPECT_EQ(0ul, ukm_source_count());
-  EXPECT_EQ(0ul, ukm_entry_count());
+  EXPECT_EQ(0ul, ukm_tester().sources_count());
+  EXPECT_EQ(0ul, ukm_tester().entries_count());
 }
 
 TEST_F(UkmPageLoadMetricsObserverTest, Basic) {
@@ -166,25 +94,28 @@
   // Simulate closing the tab.
   DeleteContents();
 
-  EXPECT_EQ(1ul, ukm_source_count());
-  const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1);
+  EXPECT_EQ(1ul, ukm_tester().sources_count());
+  const ukm::UkmSource* source = ukm_tester().GetSourceForUrl(kTestUrl1);
   EXPECT_EQ(GURL(kTestUrl1), source->url());
 
-  EXPECT_GE(ukm_entry_count(), 1ul);
-  ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source->id());
-  EXPECT_EQ(entry->source_id, source->id());
-  EXPECT_EQ(entry->event_hash,
-            base::HashMetricName(internal::kUkmPageLoadEventName));
-  EXPECT_FALSE(entry->metrics.empty());
-  ExpectMetric(internal::kUkmPageTransition, ui::PAGE_TRANSITION_LINK,
-               entry.get());
-  ExpectMetric(internal::kUkmParseStartName, 100, entry.get());
-  ExpectMetric(internal::kUkmDomContentLoadedName, 200, entry.get());
-  ExpectMetric(internal::kUkmFirstPaintName, 250, entry.get());
-  ExpectMetric(internal::kUkmFirstContentfulPaintName, 300, entry.get());
-  ExpectMetric(internal::kUkmLoadEventName, 500, entry.get());
-  EXPECT_FALSE(HasMetric(internal::kUkmFirstMeaningfulPaintName, entry.get()));
-  EXPECT_TRUE(HasMetric(internal::kUkmForegroundDurationName, entry.get()));
+  EXPECT_GE(ukm_tester().entries_count(), 1ul);
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmPageTransition,
+                            ui::PAGE_TRANSITION_LINK);
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmParseStartName, 100);
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmDomContentLoadedName, 200);
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmFirstPaintName, 250);
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmFirstContentfulPaintName, 300);
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmLoadEventName, 500);
+  EXPECT_FALSE(ukm_tester().HasMetric(*source, internal::kUkmPageLoadEventName,
+                                      internal::kUkmFirstMeaningfulPaintName));
+  EXPECT_TRUE(ukm_tester().HasMetric(*source, internal::kUkmPageLoadEventName,
+                                     internal::kUkmForegroundDurationName));
 }
 
 TEST_F(UkmPageLoadMetricsObserverTest, FailedProvisionalLoad) {
@@ -201,28 +132,30 @@
   // Simulate closing the tab.
   DeleteContents();
 
-  EXPECT_EQ(1ul, ukm_source_count());
-  const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1);
+  EXPECT_EQ(1ul, ukm_tester().sources_count());
+  const ukm::UkmSource* source = ukm_tester().GetSourceForUrl(kTestUrl1);
   EXPECT_EQ(GURL(kTestUrl1), source->url());
 
-  EXPECT_GE(ukm_entry_count(), 1ul);
-  ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source->id());
-  EXPECT_EQ(entry->source_id, source->id());
-  EXPECT_EQ(entry->event_hash,
-            base::HashMetricName(internal::kUkmPageLoadEventName));
+  EXPECT_GE(ukm_tester().entries_count(), 1ul);
 
   // Make sure that only the following metrics are logged. In particular, no
   // paint/document/etc timing metrics should be logged for failed provisional
   // loads.
-  EXPECT_EQ(5ul, entry->metrics.size());
-  ExpectMetric(internal::kUkmPageTransition, ui::PAGE_TRANSITION_LINK,
-               entry.get());
-  ExpectMetric(internal::kUkmEffectiveConnectionType,
-               net::EFFECTIVE_CONNECTION_TYPE_2G, entry.get());
-  ExpectMetric(internal::kUkmNetErrorCode,
-               static_cast<int64_t>(net::ERR_TIMED_OUT) * -1, entry.get());
-  EXPECT_TRUE(HasMetric(internal::kUkmForegroundDurationName, entry.get()));
-  EXPECT_TRUE(HasMetric(internal::kUkmFailedProvisionaLoadName, entry.get()));
+  EXPECT_EQ(5, ukm_tester().CountMetricsForEventName(
+                   *source, internal::kUkmPageLoadEventName));
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmPageTransition,
+                            ui::PAGE_TRANSITION_LINK);
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmEffectiveConnectionType,
+                            net::EFFECTIVE_CONNECTION_TYPE_2G);
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmNetErrorCode,
+                            static_cast<int64_t>(net::ERR_TIMED_OUT) * -1);
+  EXPECT_TRUE(ukm_tester().HasMetric(*source, internal::kUkmPageLoadEventName,
+                                     internal::kUkmForegroundDurationName));
+  EXPECT_TRUE(ukm_tester().HasMetric(*source, internal::kUkmPageLoadEventName,
+                                     internal::kUkmFailedProvisionaLoadName));
 }
 
 TEST_F(UkmPageLoadMetricsObserverTest, FirstMeaningfulPaint) {
@@ -239,18 +172,15 @@
   // Simulate closing the tab.
   DeleteContents();
 
-  EXPECT_EQ(1ul, ukm_source_count());
-  const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1);
+  EXPECT_EQ(1ul, ukm_tester().sources_count());
+  const ukm::UkmSource* source = ukm_tester().GetSourceForUrl(kTestUrl1);
   EXPECT_EQ(GURL(kTestUrl1), source->url());
 
-  EXPECT_GE(ukm_entry_count(), 1ul);
-  ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source->id());
-  EXPECT_EQ(entry->source_id, source->id());
-  EXPECT_EQ(entry->event_hash,
-            base::HashMetricName(internal::kUkmPageLoadEventName));
-  EXPECT_FALSE(entry->metrics.empty());
-  ExpectMetric(internal::kUkmFirstMeaningfulPaintName, 600, entry.get());
-  EXPECT_TRUE(HasMetric(internal::kUkmForegroundDurationName, entry.get()));
+  EXPECT_GE(ukm_tester().entries_count(), 1ul);
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmFirstMeaningfulPaintName, 600);
+  EXPECT_TRUE(ukm_tester().HasMetric(*source, internal::kUkmPageLoadEventName,
+                                     internal::kUkmForegroundDurationName));
 }
 
 TEST_F(UkmPageLoadMetricsObserverTest, MultiplePageLoads) {
@@ -276,34 +206,30 @@
   // Simulate closing the tab.
   DeleteContents();
 
-  EXPECT_EQ(2ul, ukm_source_count());
-  const ukm::UkmSource* source1 = GetUkmSourceForUrl(kTestUrl1);
-  const ukm::UkmSource* source2 = GetUkmSourceForUrl(kTestUrl2);
+  EXPECT_EQ(2ul, ukm_tester().sources_count());
+  const ukm::UkmSource* source1 = ukm_tester().GetSourceForUrl(kTestUrl1);
+  const ukm::UkmSource* source2 = ukm_tester().GetSourceForUrl(kTestUrl2);
   EXPECT_EQ(GURL(kTestUrl1), source1->url());
   EXPECT_EQ(GURL(kTestUrl2), source2->url());
   EXPECT_NE(source1->id(), source2->id());
 
-  EXPECT_GE(ukm_entry_count(), 2ul);
-  ukm::mojom::UkmEntryPtr entry1 = GetMergedEntryForSourceID(source1->id());
-  ukm::mojom::UkmEntryPtr entry2 = GetMergedEntryForSourceID(source2->id());
-  EXPECT_NE(entry1->source_id, entry2->source_id);
+  EXPECT_GE(ukm_tester().entries_count(), 2ul);
 
-  EXPECT_EQ(entry1->source_id, source1->id());
-  EXPECT_EQ(entry1->event_hash,
-            base::HashMetricName(internal::kUkmPageLoadEventName));
-  EXPECT_FALSE(entry1->metrics.empty());
-  ExpectMetric(internal::kUkmFirstContentfulPaintName, 200, entry1.get());
-  EXPECT_FALSE(HasMetric(internal::kUkmFirstMeaningfulPaintName, entry2.get()));
-  EXPECT_TRUE(HasMetric(internal::kUkmForegroundDurationName, entry1.get()));
+  ukm_tester().ExpectMetric(*source1, internal::kUkmPageLoadEventName,
+                            internal::kUkmFirstContentfulPaintName, 200);
+  EXPECT_FALSE(ukm_tester().HasMetric(*source2, internal::kUkmPageLoadEventName,
+                                      internal::kUkmFirstMeaningfulPaintName));
+  EXPECT_TRUE(ukm_tester().HasMetric(*source1, internal::kUkmPageLoadEventName,
+                                     internal::kUkmForegroundDurationName));
 
-  EXPECT_EQ(entry2->source_id, source2->id());
-  EXPECT_EQ(entry2->event_hash,
-            base::HashMetricName(internal::kUkmPageLoadEventName));
-  EXPECT_FALSE(entry2->metrics.empty());
-  EXPECT_FALSE(HasMetric(internal::kUkmParseStartName, entry2.get()));
-  EXPECT_FALSE(HasMetric(internal::kUkmFirstContentfulPaintName, entry2.get()));
-  EXPECT_FALSE(HasMetric(internal::kUkmFirstMeaningfulPaintName, entry2.get()));
-  EXPECT_TRUE(HasMetric(internal::kUkmForegroundDurationName, entry2.get()));
+  EXPECT_FALSE(ukm_tester().HasMetric(*source2, internal::kUkmPageLoadEventName,
+                                      internal::kUkmParseStartName));
+  EXPECT_FALSE(ukm_tester().HasMetric(*source2, internal::kUkmPageLoadEventName,
+                                      internal::kUkmFirstContentfulPaintName));
+  EXPECT_FALSE(ukm_tester().HasMetric(*source2, internal::kUkmPageLoadEventName,
+                                      internal::kUkmFirstMeaningfulPaintName));
+  EXPECT_TRUE(ukm_tester().HasMetric(*source2, internal::kUkmPageLoadEventName,
+                                     internal::kUkmForegroundDurationName));
 }
 
 TEST_F(UkmPageLoadMetricsObserverTest, NetworkQualityEstimates) {
@@ -319,20 +245,18 @@
   // Simulate closing the tab.
   DeleteContents();
 
-  EXPECT_EQ(1ul, ukm_source_count());
-  const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1);
+  EXPECT_EQ(1ul, ukm_tester().sources_count());
+  const ukm::UkmSource* source = ukm_tester().GetSourceForUrl(kTestUrl1);
   EXPECT_EQ(GURL(kTestUrl1), source->url());
 
-  EXPECT_GE(ukm_entry_count(), 1ul);
-  ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source->id());
-  EXPECT_EQ(entry->source_id, source->id());
-  EXPECT_EQ(entry->event_hash,
-            base::HashMetricName(internal::kUkmPageLoadEventName));
-  EXPECT_FALSE(entry->metrics.empty());
-  ExpectMetric(internal::kUkmEffectiveConnectionType,
-               net::EFFECTIVE_CONNECTION_TYPE_3G, entry.get());
-  ExpectMetric(internal::kUkmHttpRttEstimate, 100, entry.get());
-  ExpectMetric(internal::kUkmTransportRttEstimate, 200, entry.get());
+  EXPECT_GE(ukm_tester().entries_count(), 1ul);
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmEffectiveConnectionType,
+                            net::EFFECTIVE_CONNECTION_TYPE_3G);
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmHttpRttEstimate, 100);
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmTransportRttEstimate, 200);
 }
 
 TEST_F(UkmPageLoadMetricsObserverTest, PageTransitionReload) {
@@ -343,16 +267,12 @@
   // Simulate closing the tab.
   DeleteContents();
 
-  EXPECT_EQ(1ul, ukm_source_count());
-  const ukm::UkmSource* source = GetUkmSourceForUrl(kTestUrl1);
+  EXPECT_EQ(1ul, ukm_tester().sources_count());
+  const ukm::UkmSource* source = ukm_tester().GetSourceForUrl(kTestUrl1);
   EXPECT_EQ(GURL(kTestUrl1), source->url());
 
-  EXPECT_GE(ukm_entry_count(), 1ul);
-  ukm::mojom::UkmEntryPtr entry = GetMergedEntryForSourceID(source->id());
-  EXPECT_EQ(entry->source_id, source->id());
-  EXPECT_EQ(entry->event_hash,
-            base::HashMetricName(internal::kUkmPageLoadEventName));
-  EXPECT_FALSE(entry->metrics.empty());
-  ExpectMetric(internal::kUkmPageTransition, ui::PAGE_TRANSITION_RELOAD,
-               entry.get());
+  EXPECT_GE(ukm_tester().entries_count(), 1ul);
+  ukm_tester().ExpectMetric(*source, internal::kUkmPageLoadEventName,
+                            internal::kUkmPageTransition,
+                            ui::PAGE_TRANSITION_RELOAD);
 }
diff --git a/chrome/browser/page_load_metrics/test/ukm_tester.cc b/chrome/browser/page_load_metrics/test/ukm_tester.cc
new file mode 100644
index 0000000..b4cd630
--- /dev/null
+++ b/chrome/browser/page_load_metrics/test/ukm_tester.cc
@@ -0,0 +1,199 @@
+// 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/page_load_metrics/test/ukm_tester.h"
+
+#include <algorithm>
+#include <iterator>
+
+#include "base/metrics/metrics_hashes.h"
+#include "components/ukm/ukm_source.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+// Provides a single merged ukm::mojom::UkmEntry proto that contains all metrics
+// from the given |entries|. |entries| must be non-empty, and all |entries| must
+// have the same |source_id| and |event_hash|.
+ukm::mojom::UkmEntryPtr GetMergedEntry(
+    const std::vector<const ukm::mojom::UkmEntry*>& entries) {
+  EXPECT_FALSE(entries.empty());
+  ukm::mojom::UkmEntryPtr merged_entry = ukm::mojom::UkmEntry::New();
+  for (const auto* entry : entries) {
+    if (merged_entry->event_hash) {
+      EXPECT_EQ(merged_entry->source_id, entry->source_id);
+      EXPECT_EQ(merged_entry->event_hash, entry->event_hash);
+    } else {
+      merged_entry->event_hash = entry->event_hash;
+      merged_entry->source_id = entry->source_id;
+    }
+    for (const auto& metric : entry->metrics) {
+      merged_entry->metrics.emplace_back(metric->Clone());
+    }
+  }
+  return merged_entry;
+}
+
+std::vector<int64_t> GetValuesForMetric(const ukm::mojom::UkmEntry* entry,
+                                        const char* metric_name) {
+  std::vector<int64_t> values;
+  const uint64_t metric_hash = base::HashMetricName(metric_name);
+  for (const auto& metric : entry->metrics) {
+    if (metric->metric_hash == metric_hash)
+      values.push_back(metric->value);
+  }
+  return values;
+}
+
+}  // namespace
+
+namespace page_load_metrics {
+namespace test {
+
+UkmTester::UkmTester(ukm::TestUkmRecorder* test_ukm_recorder)
+    : test_ukm_recorder_(test_ukm_recorder) {}
+
+const ukm::UkmSource* UkmTester::GetSourceForUrl(const char* url) const {
+  std::vector<const ukm::UkmSource*> matching_sources = GetSourcesForUrl(url);
+  EXPECT_LE(1ul, matching_sources.size());
+  return matching_sources.empty() ? nullptr : matching_sources.back();
+}
+
+std::vector<const ukm::UkmSource*> UkmTester::GetSourcesForUrl(
+    const char* url) const {
+  std::vector<const ukm::UkmSource*> matching_sources;
+  for (const auto& candidate : test_ukm_recorder_->GetSources()) {
+    if (candidate.second->url() == url)
+      matching_sources.push_back(candidate.second.get());
+  }
+  return matching_sources;
+}
+
+std::vector<const ukm::mojom::UkmEntry*> UkmTester::GetEntriesForSourceID(
+    ukm::SourceId source_id,
+    const char* event_name) const {
+  const uint64_t event_hash = base::HashMetricName(event_name);
+  std::vector<const ukm::mojom::UkmEntry*> entries;
+  for (size_t i = 0; i < entries_count(); ++i) {
+    const ukm::mojom::UkmEntry* entry = test_ukm_recorder_->GetEntry(i);
+    if (entry->source_id == source_id && entry->event_hash == event_hash) {
+      entries.push_back(entry);
+    }
+  }
+  return entries;
+}
+
+ukm::mojom::UkmEntryPtr UkmTester::GetMergedEntryForSourceID(
+    ukm::SourceId source_id,
+    const char* event_name) const {
+  ukm::mojom::UkmEntryPtr entry =
+      GetMergedEntry(GetEntriesForSourceID(source_id, event_name));
+  EXPECT_EQ(source_id, entry->source_id);
+  EXPECT_EQ(base::HashMetricName(event_name), entry->event_hash);
+  return entry;
+}
+
+bool UkmTester::HasEntry(const ukm::UkmSource& source,
+                         const char* event_name) const {
+  return CountEntries(source, event_name) > 0;
+}
+
+int UkmTester::CountEntries(const ukm::UkmSource& source,
+                            const char* event_name) const {
+  return GetEntriesForSourceID(source.id(), event_name).size();
+}
+
+void UkmTester::ExpectEntry(const ukm::UkmSource& source,
+                            const char* event_name,
+                            const std::vector<std::pair<const char*, int64_t>>&
+                                expected_metrics) const {
+  // Produce a sorted view of the expected metrics, since order is not
+  // significant.
+  std::vector<std::pair<uint64_t, int64_t>> sorted_expected_metrics;
+  std::transform(expected_metrics.begin(), expected_metrics.end(),
+                 std::back_inserter(sorted_expected_metrics),
+                 [](const std::pair<const char*, int64_t>& metric) {
+                   return std::make_pair(base::HashMetricName(metric.first),
+                                         metric.second);
+                 });
+  std::sort(sorted_expected_metrics.begin(), sorted_expected_metrics.end());
+
+  std::vector<const ukm::mojom::UkmEntry*> candidate_entries =
+      GetEntriesForSourceID(source.id(), event_name);
+
+  // Produce a view of each matching entry's metrics that can be compared with
+  // sorted_expected_metrics.
+  std::vector<std::vector<std::pair<uint64_t, int64_t>>> candidate_metrics;
+  std::transform(candidate_entries.begin(), candidate_entries.end(),
+                 std::back_inserter(candidate_metrics),
+                 [](const ukm::mojom::UkmEntry* candidate_entry) {
+                   std::vector<std::pair<uint64_t, int64_t>> metrics;
+                   std::transform(candidate_entry->metrics.begin(),
+                                  candidate_entry->metrics.end(),
+                                  std::back_inserter(metrics),
+                                  [](const ukm::mojom::UkmMetricPtr& metric) {
+                                    return std::make_pair(metric->metric_hash,
+                                                          metric->value);
+                                  });
+                   std::sort(metrics.begin(), metrics.end());
+                   return metrics;
+                 });
+
+  if (std::find(candidate_metrics.begin(), candidate_metrics.end(),
+                sorted_expected_metrics) == candidate_metrics.end()) {
+    FAIL() << "Failed to find metrics for event: " << event_name;
+  }
+}
+
+int UkmTester::CountMetricsForEventName(const ukm::UkmSource& source,
+                                        const char* event_name) const {
+  ukm::mojom::UkmEntryPtr entry =
+      GetMergedEntryForSourceID(source.id(), event_name);
+  return entry.get() ? entry->metrics.size() : 0;
+}
+
+bool UkmTester::HasMetric(const ukm::UkmSource& source,
+                          const char* event_name,
+                          const char* metric_name) const {
+  return CountMetrics(source, event_name, metric_name) > 0;
+}
+
+int UkmTester::CountMetrics(const ukm::UkmSource& source,
+                            const char* event_name,
+                            const char* metric_name) const {
+  ukm::mojom::UkmEntryPtr entry =
+      GetMergedEntryForSourceID(source.id(), event_name);
+  return GetValuesForMetric(entry.get(), metric_name).size();
+}
+
+void UkmTester::ExpectMetric(const ukm::UkmSource& source,
+                             const char* event_name,
+                             const char* metric_name,
+                             int64_t expected_value) const {
+  ExpectMetrics(source, event_name, metric_name, {expected_value});
+}
+
+void UkmTester::ExpectMetrics(
+    const ukm::UkmSource& source,
+    const char* event_name,
+    const char* metric_name,
+    const std::vector<int64_t>& expected_values) const {
+  ukm::mojom::UkmEntryPtr entry =
+      GetMergedEntryForSourceID(source.id(), event_name);
+
+  // Make sure both vectors are sorted before comparing, since order is not
+  // significant.
+  std::vector<int64_t> sorted_expected_values(expected_values);
+  std::sort(sorted_expected_values.begin(), sorted_expected_values.end());
+
+  std::vector<int64_t> actual_values =
+      GetValuesForMetric(entry.get(), metric_name);
+  std::sort(actual_values.begin(), actual_values.end());
+
+  EXPECT_EQ(actual_values, sorted_expected_values)
+      << "Failed to find expected_values for metric: " << metric_name;
+}
+
+}  // namespace test
+}  // namespace page_load_metrics
diff --git a/chrome/browser/page_load_metrics/test/ukm_tester.h b/chrome/browser/page_load_metrics/test/ukm_tester.h
new file mode 100644
index 0000000..c115cbc
--- /dev/null
+++ b/chrome/browser/page_load_metrics/test/ukm_tester.h
@@ -0,0 +1,113 @@
+// 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_PAGE_LOAD_METRICS_TEST_UKM_TESTER_H_
+#define CHROME_BROWSER_PAGE_LOAD_METRICS_TEST_UKM_TESTER_H_
+
+#include <utility>
+#include <vector>
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "components/ukm/test_ukm_recorder.h"
+#include "services/metrics/public/cpp/ukm_recorder.h"
+#include "services/metrics/public/interfaces/ukm_interface.mojom.h"
+
+namespace ukm {
+class UkmSource;
+}  // namespace ukm
+
+namespace page_load_metrics {
+namespace test {
+
+// UkmTester provides utilities for testing the logging of UKM sources, events,
+// and metrics.
+class UkmTester {
+ public:
+  explicit UkmTester(ukm::TestUkmRecorder* test_ukm_recorder);
+
+  // Number of UKM sources recorded.
+  size_t sources_count() const { return test_ukm_recorder_->sources_count(); }
+
+  // Number of UKM entries recorded.
+  size_t entries_count() const { return test_ukm_recorder_->entries_count(); }
+
+  const ukm::UkmSource* GetSourceForUrl(const char* url) const;
+
+  std::vector<const ukm::UkmSource*> GetSourcesForUrl(const char* url) const;
+
+  // Returns whether the given UKM |source| has an entry with the given
+  // |event_name|.
+  bool HasEntry(const ukm::UkmSource& source,
+                const char* event_name) const WARN_UNUSED_RESULT;
+
+  // Returns the number of metrics recorded for the given UKM |source| and
+  // |event_name|.
+  int CountMetricsForEventName(const ukm::UkmSource& source,
+                               const char* event_name) const;
+
+  // Returns whether a metric with the given |metric_name| was recorded for the
+  // given UKM |source| and |event_name|.
+  bool HasMetric(const ukm::UkmSource& source,
+                 const char* event_name,
+                 const char* metric_name) const WARN_UNUSED_RESULT;
+
+  // Returns the number of metrics recorded with the given |metric_name|, for
+  // the given UKM |source| and |event_name|.
+  int CountMetrics(const ukm::UkmSource& source,
+                   const char* event_name,
+                   const char* metric_name) const WARN_UNUSED_RESULT;
+
+  // Expects that a single metric was recorded with the given |expected_value|,
+  // for the given |source| and |event_name|. This is shorthand for calling
+  // ExpectMetrics with a single value in the expected values vector.
+  void ExpectMetric(const ukm::UkmSource& source,
+                    const char* event_name,
+                    const char* metric_name,
+                    int64_t expected_value) const;
+
+  // Expects that metrics were recorded with the given |expected_values|, for
+  // the given |source| and |event_name|. The order of |expected_values| is not
+  // significant.
+  void ExpectMetrics(const ukm::UkmSource& source,
+                     const char* event_name,
+                     const char* metric_name,
+                     const std::vector<int64_t>& expected_values) const;
+
+  // UKM entries that may be recorded multiple times for a single source may
+  // need to verify that an expected number of UKM entries were logged. The
+  // utility methods below can be used to verify expected entries. UKM entries
+  // that aren't recorded multiple times per source should prefer using
+  // HasMetric/CountMetrics/ExpectMetric(s) above.
+
+  // Returns the number of entries recorded with the given |event_name|, for the
+  // given UKM |source|.
+  int CountEntries(const ukm::UkmSource& source, const char* event_name) const;
+
+  // Expects that an entry with the given |expected_metrics| was recorded, for
+  // the given |source| and |event_name|. The order of |expected_metrics| is not
+  // significant. |expected_metrics| contains (metric name,metric value) pairs.
+  void ExpectEntry(const ukm::UkmSource& source,
+                   const char* event_name,
+                   const std::vector<std::pair<const char*, int64_t>>&
+                       expected_metrics) const;
+
+ private:
+  ukm::mojom::UkmEntryPtr GetMergedEntryForSourceID(
+      ukm::SourceId source_id,
+      const char* event_name) const;
+
+  std::vector<const ukm::mojom::UkmEntry*> GetEntriesForSourceID(
+      ukm::SourceId source_id,
+      const char* event_name) const;
+
+  const ukm::TestUkmRecorder* test_ukm_recorder_;
+
+  DISALLOW_COPY_AND_ASSIGN(UkmTester);
+};
+
+}  // namespace test
+}  // namespace page_load_metrics
+
+#endif  // CHROME_BROWSER_PAGE_LOAD_METRICS_TEST_UKM_TESTER_H_
diff --git a/chrome/browser/profiling_host/profiling_process_host.cc b/chrome/browser/profiling_host/profiling_process_host.cc
index fd64531..44626e8a 100644
--- a/chrome/browser/profiling_host/profiling_process_host.cc
+++ b/chrome/browser/profiling_host/profiling_process_host.cc
@@ -8,17 +8,35 @@
 #include "base/path_service.h"
 #include "base/process/launch.h"
 #include "base/strings/string_number_conversions.h"
-#include "base/strings/utf_string_conversions.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/profiling/memlog_sender.h"
 #include "content/public/common/content_switches.h"
 
+#if defined(OS_LINUX)
+#include <fcntl.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "base/files/scoped_file.h"
+#include "base/process/process_metrics.h"
+#include "base/third_party/valgrind/valgrind.h"
+#endif
+
 namespace profiling {
 
 namespace {
 
 ProfilingProcessHost* pph_singleton = nullptr;
 
+#if defined(OS_LINUX)
+bool IsRunningOnValgrind() {
+  return RUNNING_ON_VALGRIND;
+}
+#endif
+
 base::CommandLine MakeProfilingCommandLine(const std::string& pipe_id) {
   // Program name.
   base::FilePath child_path;
@@ -28,7 +46,7 @@
   // When running under Valgrind, forking /proc/self/exe ends up forking the
   // Valgrind executable, which then crashes. However, it's almost safe to
   // assume that the updates won't happen while testing with Valgrind tools.
-  if (!RunningOnValgrind())
+  if (!IsRunningOnValgrind())
     child_path = base::FilePath(base::kProcSelfExe);
 #endif
   if (child_path.empty())
@@ -78,15 +96,46 @@
   child_cmd_line->AppendSwitchASCII(switches::kMemlogPipe, pph->pipe_id_);
 }
 
+#if defined(OS_WIN)
 void ProfilingProcessHost::Launch() {
   base::Process process = base::Process::Current();
-  pipe_id_ = base::IntToString(static_cast<int>(process.Pid()));
+  base::LaunchOptions options;
 
+  pipe_id_ = base::IntToString(static_cast<int>(process.Pid()));
   base::CommandLine profiling_cmd = MakeProfilingCommandLine(pipe_id_);
 
-  base::LaunchOptions options;
   process_ = base::LaunchProcess(profiling_cmd, options);
   StartMemlogSender(pipe_id_);
 }
+#elif defined(OS_POSIX)
+
+void ProfilingProcessHost::Launch() {
+  // Create the socketpair.
+  // TODO(ajwong): Should this use base/posix/unix_domain_socket_linux.h?
+  int fds[2];
+  PCHECK(socketpair(AF_UNIX, SOCK_STREAM, 0, fds) == 0);
+  PCHECK(fcntl(fds[0], F_SETFL, O_NONBLOCK) == 0);
+  PCHECK(fcntl(fds[1], F_SETFL, O_NONBLOCK) == 0);
+
+  // Store one end for our message sender to use.
+  pipe_id_ = base::IntToString(fds[0]);
+  base::ScopedFD child_end(fds[1]);
+
+  // This is a new process forked from us. No need to remap.
+  base::FileHandleMappingVector fd_map;
+  fd_map.emplace_back(std::pair<int, int>(child_end.get(), child_end.get()));
+
+  base::LaunchOptions options;
+  options.fds_to_remap = &fd_map;
+  options.kill_on_parent_death = true;
+
+  base::CommandLine profiling_cmd =
+      MakeProfilingCommandLine(base::IntToString(child_end.get()));
+  process_ = base::LaunchProcess(profiling_cmd, options);
+  StartMemlogSender(pipe_id_);
+}
+#else
+#error Unsupported OS.
+#endif
 
 }  // namespace profiling
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing.js
index 199e4065..99cbad3 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing.js
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing.js
@@ -43,12 +43,6 @@
   this.node_ = node;
 };
 
-/**
- * Flag set to indicate whether ChromeVox uses experimental rich text support.
- * @type {boolean}
- */
-editing.useRichText = true;
-
 editing.TextEditHandler.prototype = {
   /** @return {!AutomationNode} */
   get node() {
@@ -76,7 +70,7 @@
   editing.TextEditHandler.call(this, node);
 
   chrome.automation.getDesktop(function(desktop) {
-    var useRichText = editing.useRichText && node.state.richlyEditable;
+    var useRichText = node.state[StateType.RICHLY_EDITABLE];
 
     /** @private {!AutomationEditableText} */
     this.editableText_ = useRichText ? new AutomationRichEditableText(node) :
@@ -253,10 +247,18 @@
     // extended from anchor or focus. The default behavior is to compute lines
     // via focus.
     var baseLineOnStart = prevFocusLine.isSameLineAndSelection(focusLine);
+    var isSameSelection =
+        baseLineOnStart && prevAnchorLine.isSameLineAndSelection(anchorLine);
 
-    var cur = new editing.EditableLine(
-        root.anchorObject, root.anchorOffset, root.focusObject,
-        root.focusOffset, baseLineOnStart);
+    var cur;
+    if (isSameSelection && this.line_) {
+      // Nothing changed, return.
+      return;
+    } else {
+      cur = new editing.EditableLine(
+          root.anchorObject, root.anchorOffset, root.focusObject,
+          root.focusOffset, baseLineOnStart);
+    }
     var prev = this.line_;
     this.line_ = cur;
 
@@ -317,8 +319,64 @@
           .go();
     } else if (!cur.hasCollapsedSelection()) {
       // This is a selection.
-      cvox.ChromeVox.tts.speak(cur.selectedText, cvox.QueueMode.CATEGORY_FLUSH);
-      cvox.ChromeVox.tts.speak(Msgs.getMsg('selected'), cvox.QueueMode.QUEUE);
+
+      // Speech requires many more states than braille.
+      // TODO(dtseng): base/extent and anchor/focus are mismatched in AX. Swap
+      // once this works.
+      var curBase = baseLineOnStart ? focusLine : anchorLine;
+      var curExtent = baseLineOnStart ? anchorLine : focusLine;
+      var text = '';
+      var suffixMsg = '';
+      if (curBase.isBeforeLine(curExtent)) {
+        // Forward selection.
+        if (prev.isBeforeLine(curBase)) {
+          // Wrapped across the baseline. Read out the new selection.
+          suffixMsg = 'selected';
+          text = this.getTextSelection_(
+              curBase.startContainer_, curBase.localStartOffset,
+              curExtent.endContainer_, curExtent.localEndOffset);
+        } else {
+          if (prev.isBeforeLine(curExtent)) {
+            // Grew.
+            suffixMsg = 'selected';
+            text = this.getTextSelection_(
+                prev.endContainer_, prev.localEndOffset,
+                curExtent.endContainer_, curExtent.localEndOffset);
+          } else {
+            // Shrank.
+            suffixMsg = 'unselected';
+            text = this.getTextSelection_(
+                curExtent.endContainer_, curExtent.localEndOffset,
+                prev.endContainer_, prev.localEndOffset);
+          }
+        }
+      } else {
+        // Backward selection.
+        if (curBase.isBeforeLine(prev)) {
+          // Wrapped across the baseline. Read out the new selection.
+          suffixMsg = 'selected';
+          text = this.getTextSelection_(
+              curExtent.startContainer_, curExtent.localStartOffset,
+              curBase.endContainer_, curBase.localEndOffset);
+        } else {
+          if (curExtent.isBeforeLine(prev)) {
+            // Grew.
+            suffixMsg = 'selected';
+            text = this.getTextSelection_(
+                curExtent.startContainer_, curExtent.localStartOffset,
+                prev.startContainer_, prev.localStartOffset);
+          } else {
+            // Shrank.
+            suffixMsg = 'unselected';
+            text = this.getTextSelection_(
+                prev.startContainer_, prev.localStartOffset,
+                curExtent.startContainer_, curExtent.localStartOffset);
+          }
+        }
+      }
+
+      cvox.ChromeVox.tts.speak(text, cvox.QueueMode.CATEGORY_FLUSH);
+      cvox.ChromeVox.tts.speak(Msgs.getMsg(suffixMsg), cvox.QueueMode.QUEUE);
       this.brailleCurrentRichLine_();
     } else {
       // Describe the current line. This accounts for previous/current
@@ -337,6 +395,40 @@
   },
 
   /**
+   * @param {AutomationNode|undefined} startNode
+   * @param {number} startOffset
+   * @param {AutomationNode|undefined} endNode
+   * @param {number} endOffset
+   * @return {string}
+   */
+  getTextSelection_: function(startNode, startOffset, endNode, endOffset) {
+    if (!startNode || !endNode)
+      return '';
+
+    if (startNode == endNode) {
+      return startNode.name ? startNode.name.substring(startOffset, endOffset) :
+                              '';
+    }
+
+    var text = '';
+    if (startNode.name)
+      text = startNode.name.substring(startOffset);
+
+    for (var node = startNode;
+         (node = AutomationUtil.findNextNode(
+              node, Dir.FORWARD, AutomationPredicate.leafOrStaticText)) &&
+         node != endNode;) {
+      // Padding needs to get added to break up speech utterances.
+      if (node.name)
+        text += ' ' + node.name;
+    }
+
+    if (endNode.name)
+      text += ' ' + endNode.name.substring(0, endOffset);
+    return text;
+  },
+
+  /**
    * @param {number} markerType
    * @param {boolean=} opt_end
    * @private
@@ -543,6 +635,8 @@
   this.end_ = this.end_.deepEquivalent || this.end_;
   /** @private {number} */
   this.localContainerStartOffset_ = startIndex;
+  /** @private {number} */
+  this.localContainerEndOffset_ = endIndex;
 
   // Computed members.
   /** @private {Spannable} */
@@ -583,10 +677,16 @@
     if (lineBase.node == lineExtend.node)
       this.value_.setSpan(lineExtend, 0, nameLen);
 
+    this.startContainer_ = this.start_.node;
+    if (this.startContainer_.role == RoleType.INLINE_TEXT_BOX)
+      this.startContainer_ = this.startContainer_.parent;
+    this.endContainer_ = this.end_.node;
+    if (this.endContainer_.role == RoleType.INLINE_TEXT_BOX)
+      this.endContainer_ = this.endContainer_.parent;
+
     // Initialize defaults.
     this.lineStart_ = lineBase.node;
     this.lineEnd_ = this.lineStart_;
-    this.startContainer_ = this.lineStart_.parent;
     this.lineStartContainer_ = this.lineStart_.parent;
     this.lineEndContainer_ = this.lineStart_.parent;
 
@@ -739,7 +839,7 @@
    * @return {number}
    */
   get localStartOffset() {
-    return this.startOffset - this.containerStartOffset;
+    return this.localContainerStartOffset_;
   },
 
   /**
@@ -748,7 +848,7 @@
    * @return {number}
    */
   get localEndOffset() {
-    return this.endOffset - this.containerStartOffset;
+    return this.localContainerEndOffset_;
   },
 
   /**
@@ -815,6 +915,19 @@
     return this.isSameLine(otherLine) &&
         this.startOffset == otherLine.startOffset &&
         this.endOffset == otherLine.endOffset;
+  },
+
+  /**
+   * Returns whether this line comes before |otherLine| in document order.
+   * @return {boolean}
+   */
+  isBeforeLine: function(otherLine) {
+    if (this.isSameLine(otherLine) || !this.lineStartContainer_ ||
+        !otherLine.lineStartContainer_)
+      return false;
+    return AutomationUtil.getDirection(
+               this.lineStartContainer_, otherLine.lineStartContainer_) ==
+        Dir.FORWARD;
   }
 };
 
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs b/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs
index f589443a..2bd71da 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs
@@ -31,35 +31,6 @@
     return mockFeedback;
   },
 
-  assertLineData: function(doc, data) {
-    editing.useRichText = false;
-    this.runWithLoadedTree(doc, function(root) {
-      var input = root.find({role: RoleType.TEXT_FIELD});
-      input.addEventListener('focus', this.newCallback(function() {
-        var textHandler = ChromeVoxState.desktopAutomationHandler
-            .textEditHandler_.editableText_;
-
-        var offset = 0;
-        for (var i = 0; i < data.length; i++) {
-          var line = data[i];
-          var actualStart = textHandler.getLineStart(i);
-          var actualEnd = textHandler.getLineEnd(i);
-          assertEquals(line.start, actualStart,
-                       'Unexpected start: ' + actualStart);
-          assertEquals(line.end, actualEnd,
-                      'Unexpected end: ' + actualEnd);
-          assertEquals(line.text, textHandler.getLine(i));
-          var offset = textHandler.getLineStart(i);
-          for (var j = 0; j < line.text.length; j++, offset++) {
-            assertEquals(i, textHandler.getLineIndex(offset),
-                'Unexpected Line: ' + line.text + ' at index: ' + offset);
-          }
-        }
-      }), true);
-      input.focus();
-    });
-  },
-
 };
 
 var doc = function() {/*!
@@ -161,58 +132,6 @@
     });
 });
 
-TEST_F('EditingTest', 'OneLineBreak', function() {
-  this.assertLineData(function() {/*!
-      <div role="textbox" contenteditable>this is a<br>test</div>
-    */},
-    [
-      {start: 0, end: 9, text: 'this is a'},
-      {start: 10, end: 14, text: 'test'}
-    ]);
-});
-
-TEST_F('EditingTest', 'TwoLineBreaks', function() {
-  this.assertLineData(function() {/*!
-      <div role="textbox" contenteditable>this is a<br><br>
-          test</div>
-    */},
-    [
-      {start: 0, end: 9, text: 'this is a'},
-      {start: 10, end: 10, text: ''},
-      {start: 11, end: 15, text: 'test'},
-    ]);
-});
-
-TEST_F('EditingTest', 'InitialBreaks', function() {
-  this.assertLineData(function() {/*!
-      <div role="textbox" contenteditable><br><br><br>
-        this is a</div>
-    */},
-    [
-      {start: 0, end: 0, text: ''},
-      {start: 1, end: 1, text: ''},
-      {start: 2, end: 2, text: ''},
-      {start: 3, end: 12, text: 'this is a'},
-    ]);
-});
-
-TEST_F('EditingTest', 'SingleCharacterLine', function() {
-  this.assertLineData(function() {/*!
-      <div role="textbox" contenteditable>
-        <div>this</div><br>
-        <div><br>
-            I<br>
-            can test</div></div>
-    */},
-    [
-      {start: 0, end: 4, text: 'this'},
-      {start: 5, end: 5, text: ''},
-      {start: 6, end: 6, text: ''},
-      {start: 7, end: 8, text: 'I'},
-      {start: 9, end: 17, text: 'can test'},
-    ]);
-});
-
 TEST_F('EditingTest', 'RichTextMoveByLine', function() {
   var mockFeedback = this.createMockFeedback();
   this.runWithLoadedTree(function() {/*!
@@ -540,6 +459,117 @@
   });
 });
 
+TEST_F('EditingTest', 'RichTextSelectByLine', function() {
+  var mockFeedback = this.createMockFeedback();
+  this.runWithLoadedTree(function() {/*!
+    <p id="go" contenteditable>
+      first line<br>
+      second line<br>
+      third line<br>
+    </p>
+    <script>
+      var commands = [
+        ['extend', 'forward', 'character'],
+        ['extend', 'forward', 'character'],
+
+        ['extend', 'forward', 'line'],
+        ['extend', 'forward', 'line'],
+
+        ['extend', 'backward', 'line'],
+        ['extend', 'backward', 'line'],
+
+        ['extend', 'forward', 'documentBoundary'],
+
+        ['move', 'forward', 'character'],
+        ['move', 'backward', 'character'],
+        ['move', 'backward', 'character'],
+
+        ['extend', 'backward', 'line'],
+        ['extend', 'backward', 'line'],
+
+        ['extend', 'forward', 'line'],
+      ];
+      document.getElementById('go').addEventListener('click', function() {
+        var sel = getSelection();
+        sel.modify.apply(sel, commands.shift());
+      }, true);
+    </script>
+  */}, function(root) {
+    var input = root.find({role: RoleType.PARAGRAPH});
+    var move = input.doDefault.bind(input);
+
+    this.listenOnce(input, 'focus', function() {
+
+      // By character.
+      mockFeedback.call(move)
+          .expectSpeech('f', 'selected')
+          .expectBraille('first line\n', {startIndex: 0, endIndex: 1})
+          .call(move)
+          .expectSpeech('i', 'added to selection')
+          .expectBraille('first line\n', {startIndex: 0, endIndex: 2})
+
+          // Forward selection.
+
+          // Growing.
+
+          // By line (notice the partial selections from the first and second
+          // lines).
+          .call(move)
+          .expectSpeech('rst line \n se', 'selected')
+          .expectBraille('second line\n', {startIndex: 0, endIndex: 2})
+
+          .call(move)
+          .expectSpeech('cond line \n th', 'selected')
+          .expectBraille('third line\n', {startIndex: 0, endIndex: 2})
+
+          // Shrinking.
+          .call(move)
+          .expectSpeech('cond line \n th', 'unselected')
+          .expectBraille('second line\n', {startIndex: 0, endIndex: 2})
+
+          .call(move)
+          .expectSpeech('fi', 'selected')
+          .expectBraille('first line\n', {startIndex: 0, endIndex: 2})
+
+          // Document boundary.
+          .call(move)
+          .expectSpeech('rst line \n second line \n third line \n \n',
+                        'selected')
+          .expectBraille('third line\n', {startIndex: 0, endIndex: 10})
+
+          // The script repositions the caret to the 'n' of the third line.
+          .call(move)
+          .expectSpeech('third line')
+          .expectBraille('third line\n', {startIndex: 10, endIndex: 10})
+          .call(move)
+          .expectSpeech('e')
+          .expectBraille('third line\n', {startIndex: 9, endIndex: 9})
+          .call(move)
+          .expectSpeech('n')
+          .expectBraille('third line\n', {startIndex: 8, endIndex: 8})
+
+          // Backward selection.
+
+          // Growing.
+          .call(move)
+          .expectSpeech(' line \n third li', 'selected')
+          .expectBraille('second line\n', {startIndex: 6, endIndex: 12})
+
+          .call(move)
+          .expectSpeech('e \n second', 'selected')
+          .expectBraille('first line\n', {startIndex: 9, endIndex: 11})
+
+          // Shrinking.
+          .call(move)
+          .expectSpeech('e \n second', 'unselected')
+          .expectBraille('second line\n', {startIndex: 6, endIndex: 12})
+
+          .replay();
+    });
+    input.focus();
+  });
+});
+
 TEST_F('EditingTest', 'EditableLineOneStaticText', function() {
   this.runWithLoadedTree(function() {/*!
     <p contenteditable style="word-spacing:100000px">this is a test</p>
@@ -573,8 +603,8 @@
 
     assertEquals(0, e.startOffset);
     assertEquals(0, e.endOffset);
-    assertEquals(0, e.localStartOffset);
-    assertEquals(0, e.localEndOffset);
+    assertEquals(5, e.localStartOffset);
+    assertEquals(5, e.localEndOffset);
 
     assertEquals(0, e.containerStartOffset);
     assertEquals(2, e.containerEndOffset);
@@ -584,8 +614,8 @@
 
     assertEquals(2, e.startOffset);
     assertEquals(2, e.endOffset);
-    assertEquals(2, e.localStartOffset);
-    assertEquals(2, e.localEndOffset);
+    assertEquals(7, e.localStartOffset);
+    assertEquals(7, e.localEndOffset);
 
     assertEquals(0, e.containerStartOffset);
     assertEquals(2, e.containerEndOffset);
diff --git a/chrome/browser/resources/chromeos/keyboard_overlay_data.js b/chrome/browser/resources/chromeos/keyboard_overlay_data.js
index 45c95e5f..a3b425c4c 100644
--- a/chrome/browser/resources/chromeos/keyboard_overlay_data.js
+++ b/chrome/browser/resources/chromeos/keyboard_overlay_data.js
@@ -4223,7 +4223,7 @@
     'g<>CTRL': 'keyboardOverlayFindTextAgain',
     'g<>CTRL<>SHIFT': 'keyboardOverlayFindPreviousText',
     'h<>CTRL': 'keyboardOverlayHistory',
-    'h<>SEARCH<>SHIFT': 'keyboardOverlayToggleHighContrastMode',
+    'h<>CTRL<>SEARCH': 'keyboardOverlayToggleHighContrastMode',
     'i<>ALT<>CTRL': 'keyboardOverlayTouchHudModeChange',
     'i<>ALT<>SHIFT': 'keyboardOverlayReportIssue',
     'i<>CTRL<>SHIFT': 'keyboardOverlayDeveloperTools',
diff --git a/chrome/browser/resources/chromeos/login/screen_gaia_signin.js b/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
index 08a83644..15751b1 100644
--- a/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
+++ b/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
@@ -228,6 +228,8 @@
                 'dialogShown', frameFilter(that.onDialogShown_));
             frame.addEventListener(
                 'dialogHidden', frameFilter(that.onDialogHidden_));
+            frame.addEventListener(
+                'menuItemClicked', frameFilter(that.onMenuItemClicked_));
           });
 
       this.gaiaAuthHost_.addEventListener(
@@ -660,8 +662,12 @@
       params.isNewGaiaFlow = true;
       params.doSamlRedirect =
           (this.screenMode_ == ScreenMode.SAML_INTERSTITIAL);
+      params.menuGuestMode = data.guestSignin;
+      params.menuKeyboardOptions = false;
+      params.menuEnterpriseEnrollment = true;
 
       this.gaiaAuthParams_ = params;
+
       switch (this.screenMode_) {
         case ScreenMode.DEFAULT:
           this.loadGaiaAuthHost_(false /* doSamlRedirect */);
@@ -810,6 +816,19 @@
     },
 
     /**
+     * Invoked when user activates menu item.
+     * @private
+     */
+    onMenuItemClicked_: function(e) {
+      if (e.detail == 'gm') {
+        Oobe.disableSigninUI();
+        chrome.send('launchIncognito');
+      } else if (e.detail == 'ee') {
+        cr.ui.Oobe.handleAccelerator(ACCELERATOR_ENROLLMENT);
+      }
+    },
+
+    /**
      * Invoked when the auth host emits 'backButton' event.
      * @private
      */
diff --git a/chrome/browser/resources/gaia_auth_host/authenticator.js b/chrome/browser/resources/gaia_auth_host/authenticator.js
index 2e293831..d07de8e 100644
--- a/chrome/browser/resources/gaia_auth_host/authenticator.js
+++ b/chrome/browser/resources/gaia_auth_host/authenticator.js
@@ -10,6 +10,8 @@
  * authentication events should pass a listener object of type
  * cr.login.GaiaAuthHost.Listener as defined in this file. After initialization,
  * call {@code load} to start the authentication flow.
+ *
+ * See go/cros-auth-design for details on Google API.
  */
 
 cr.define('cr.login', function() {
@@ -77,16 +79,19 @@
                      // not called before dispatching |authCopleted|.
                      // Default is |true|.
     'flow',          // One of 'default', 'enterprise', or 'theftprotection'.
-    'enterpriseDomain',    // Domain in which hosting device is (or should be)
-                           // enrolled.
-    'emailDomain',         // Value used to prefill domain for email.
-    'chromeType',          // Type of Chrome OS device, e.g. "chromebox".
-    'clientVersion',       // Version of the Chrome build.
-    'platformVersion',     // Version of the OS build.
-    'releaseChannel',      // Installation channel.
-    'endpointGen',         // Current endpoint generation.
-    'gapsCookie',          // GAPS cookie
-    'chromeOSApiVersion',  // GAIA Chrome OS API version
+    'enterpriseDomain',     // Domain in which hosting device is (or should be)
+                            // enrolled.
+    'emailDomain',          // Value used to prefill domain for email.
+    'chromeType',           // Type of Chrome OS device, e.g. "chromebox".
+    'clientVersion',        // Version of the Chrome build.
+    'platformVersion',      // Version of the OS build.
+    'releaseChannel',       // Installation channel.
+    'endpointGen',          // Current endpoint generation.
+    'gapsCookie',           // GAPS cookie
+    'chromeOSApiVersion',   // GAIA Chrome OS API version
+    'menuGuestMode',        // Enables "Guest mode" menu item
+    'menuKeyboardOptions',  // Enables "Keyboard options" menu item
+    'menuEnterpriseEnrollment',  // Enables "Enterprise enrollment" menu item.
 
     // The email fields allow for the following possibilities:
     //
@@ -316,6 +321,17 @@
         url = appendParam(url, 'release_channel', data.releaseChannel);
       if (data.endpointGen)
         url = appendParam(url, 'endpoint_gen', data.endpointGen);
+      if (data.chromeOSApiVersion == 2) {
+        var mi = '';
+        if (data.menuGuestMode)
+          mi += 'gm,';
+        if (data.menuKeyboardOptions)
+          mi += 'ko,';
+        if (data.menuEnterpriseEnrollment)
+          mi += 'ee,';
+        if (mi.length)
+          url = appendParam(url, 'mi', mi);
+      }
     } else {
       url = appendParam(url, 'continue', this.continueUrl_);
       url = appendParam(url, 'service', data.service || SERVICE_ID);
@@ -589,6 +605,9 @@
       this.dispatchEvent(new CustomEvent('backButton', {detail: msg.show}));
     } else if (msg.method == 'showView') {
       this.dispatchEvent(new Event('showView'));
+    } else if (msg.method == 'menuItemClicked') {
+      this.dispatchEvent(
+          new CustomEvent('menuItemClicked', {detail: msg.item}));
     } else if (msg.method == 'identifierEntered') {
       this.dispatchEvent(new CustomEvent(
           'identifierEntered',
diff --git a/chrome/browser/resources/settings/about_page/about_page.html b/chrome/browser/resources/settings/about_page/about_page.html
index 05b00cf..7e39329b 100644
--- a/chrome/browser/resources/settings/about_page/about_page.html
+++ b/chrome/browser/resources/settings/about_page/about_page.html
@@ -35,10 +35,6 @@
         --about-page-image-space: 10px;
       }
 
-      .copyable {
-        user-select: text;
-      }
-
       .info-section {
         margin-bottom: 12px;
       }
@@ -107,8 +103,7 @@
                   src="[[getIconSrc_(obsoleteSystemInfo_, currentUpdateStatusEvent_)]]">
               </iron-icon>
               <div class="start padded">
-                <div id="updateStatusMessage" class="copyable"
-                    hidden="[[!showUpdateStatus_]]"
+                <div id="updateStatusMessage" hidden="[[!showUpdateStatus_]]"
 <if expr="not chromeos">
                     inner-h-t-m-l="[[getUpdateStatusMessage_(
                         currentUpdateStatusEvent_)]]">
@@ -125,7 +120,7 @@
                     $i18n{learnMore}
                   </a>
                 </span>
-                <div class="secondary copyable">$i18n{aboutBrowserVersion}</div>
+                <div class="secondary">$i18n{aboutBrowserVersion}</div>
               </div>
               <div class="separator" hidden="[[!showButtonContainer_]]"></div>
               <span id="buttonContainer" hidden="[[!showButtonContainer_]]">
@@ -204,7 +199,7 @@
       </settings-section>
 
       <settings-section>
-        <div class="settings-box padded block copyable">
+        <div class="settings-box padded block">
           <div class="info-section">
             <div class="secondary">$i18n{aboutProductTitle}</div>
             <div class="secondary">$i18n{aboutProductCopyright}</div>
diff --git a/chrome/browser/resources/settings/about_page/detailed_build_info.html b/chrome/browser/resources/settings/about_page/detailed_build_info.html
index 0801f99..a1ae314 100644
--- a/chrome/browser/resources/settings/about_page/detailed_build_info.html
+++ b/chrome/browser/resources/settings/about_page/detailed_build_info.html
@@ -13,10 +13,6 @@
 <dom-module id="settings-detailed-build-info">
   <template>
     <style include="settings-shared">
-      .secondary {
-        -webkit-user-select: text;
-      }
-
       cr-policy-indicator {
         -webkit-margin-start: var(--cr-controlled-by-spacing);
       }
diff --git a/chrome/browser/resources/settings/android_apps_page/android_apps_page.js b/chrome/browser/resources/settings/android_apps_page/android_apps_page.js
index 6260887..b7e1491c 100644
--- a/chrome/browser/resources/settings/android_apps_page/android_apps_page.js
+++ b/chrome/browser/resources/settings/android_apps_page/android_apps_page.js
@@ -37,7 +37,7 @@
   },
 
   /**
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   onEnableTap_: function(event) {
diff --git a/chrome/browser/resources/settings/android_apps_page/android_apps_subpage.js b/chrome/browser/resources/settings/android_apps_page/android_apps_subpage.js
index ea9e855..a0699ea 100644
--- a/chrome/browser/resources/settings/android_apps_page/android_apps_subpage.js
+++ b/chrome/browser/resources/settings/android_apps_page/android_apps_subpage.js
@@ -60,7 +60,7 @@
 
   /**
    * Shows a confirmation dialog when disabling android apps.
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   onRemoveTap_: function(event) {
diff --git a/chrome/browser/resources/settings/android_apps_page/android_settings_element.js b/chrome/browser/resources/settings/android_apps_page/android_settings_element.js
index bdac9c5..b8132c1 100644
--- a/chrome/browser/resources/settings/android_apps_page/android_settings_element.js
+++ b/chrome/browser/resources/settings/android_apps_page/android_settings_element.js
@@ -19,7 +19,7 @@
   },
 
   /**
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   onManageAndroidAppsKeydown_: function(event) {
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js
index 3a52fbd..104106c 100644
--- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js
+++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js
@@ -177,7 +177,7 @@
   },
 
   /**
-   * @param {Event} e
+   * @param {!Event} e
    * @private
    */
   stopTap_: function(e) {
@@ -185,7 +185,7 @@
   },
 
   /**
-   * @param {Event} e
+   * @param {!Event} e
    * @private
    */
   onSubpageArrowTap_: function(e) {
diff --git a/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html b/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html
index 3457c8a..d8bee09 100644
--- a/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html
+++ b/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html
@@ -15,7 +15,6 @@
   <template>
     <style include="settings-shared">
       #files-to-remove-list {
-        -webkit-user-select: text;
         word-break: break-all;
       }
 
diff --git a/chrome/browser/resources/settings/device_page/display_overscan_dialog.js b/chrome/browser/resources/settings/device_page/display_overscan_dialog.js
index e9f245c..891a7146 100644
--- a/chrome/browser/resources/settings/device_page/display_overscan_dialog.js
+++ b/chrome/browser/resources/settings/device_page/display_overscan_dialog.js
@@ -76,7 +76,7 @@
   },
 
   /**
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   handleKeyEvent_: function(event) {
diff --git a/chrome/browser/resources/settings/device_page/drag_behavior.js b/chrome/browser/resources/settings/device_page/drag_behavior.js
index c08cf0c..2c55544 100644
--- a/chrome/browser/resources/settings/device_page/drag_behavior.js
+++ b/chrome/browser/resources/settings/device_page/drag_behavior.js
@@ -121,7 +121,7 @@
   },
 
   /**
-   * @param {Event} e The mouse down event.
+   * @param {!Event} e The mouse down event.
    * @return {boolean}
    * @private
    */
@@ -134,7 +134,7 @@
   },
 
   /**
-   * @param {Event} e The mouse move event.
+   * @param {!Event} e The mouse move event.
    * @return {boolean}
    * @private
    */
@@ -144,7 +144,7 @@
   },
 
   /**
-   * @param {Event} e The touch start event.
+   * @param {!Event} e The touch start event.
    * @return {boolean}
    * @private
    */
@@ -160,7 +160,7 @@
   },
 
   /**
-   * @param {Event} e The touch move event.
+   * @param {!Event} e The touch move event.
    * @return {boolean}
    * @private
    */
@@ -197,7 +197,7 @@
   },
 
   /**
-   * @param {Event} e
+   * @param {!Event} e
    * @return {boolean}
    * @private
    */
@@ -211,7 +211,7 @@
   },
 
   /**
-   * @param {Event} e The event which triggers this drag.
+   * @param {!Event} e The event which triggers this drag.
    * @param {DragPosition} eventLocation The location of the event.
    * @return {boolean}
    * @private
diff --git a/chrome/browser/resources/settings/internet_page/internet_detail_page.js b/chrome/browser/resources/settings/internet_page/internet_detail_page.js
index a56d342..6acf65d 100644
--- a/chrome/browser/resources/settings/internet_page/internet_detail_page.js
+++ b/chrome/browser/resources/settings/internet_page/internet_detail_page.js
@@ -630,7 +630,7 @@
   },
 
   /**
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   toggleAdvancedExpanded_: function(event) {
@@ -640,7 +640,7 @@
   },
 
   /**
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   toggleNetworkExpanded_: function(event) {
@@ -650,7 +650,7 @@
   },
 
   /**
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   toggleProxyExpanded_: function(event) {
diff --git a/chrome/browser/resources/settings/internet_page/internet_known_networks_page.js b/chrome/browser/resources/settings/internet_page/internet_known_networks_page.js
index cc333ac..791bf11 100644
--- a/chrome/browser/resources/settings/internet_page/internet_known_networks_page.js
+++ b/chrome/browser/resources/settings/internet_page/internet_known_networks_page.js
@@ -193,7 +193,7 @@
   /**
    * Fires a 'show-details' event with an item containing a |networkStateList_|
    * entry in the event model.
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   fireShowDetails_: function(event) {
diff --git a/chrome/browser/resources/settings/internet_page/internet_page.js b/chrome/browser/resources/settings/internet_page/internet_page.js
index 7a96a04..c4a809e 100644
--- a/chrome/browser/resources/settings/internet_page/internet_page.js
+++ b/chrome/browser/resources/settings/internet_page/internet_page.js
@@ -305,7 +305,7 @@
 
   /**
    * Event triggered when the 'Add connections' div is tapped.
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   onExpandAddConnectionsTap_: function(event) {
diff --git a/chrome/browser/resources/settings/internet_page/network_apnlist.js b/chrome/browser/resources/settings/internet_page/network_apnlist.js
index 2ecd5f3..b81f6cec 100644
--- a/chrome/browser/resources/settings/internet_page/network_apnlist.js
+++ b/chrome/browser/resources/settings/internet_page/network_apnlist.js
@@ -206,7 +206,7 @@
 
   /**
    * Event triggered when the Other APN 'Save' button is tapped.
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   onSaveOtherTap_: function(event) {
diff --git a/chrome/browser/resources/settings/internet_page/network_property_list.js b/chrome/browser/resources/settings/internet_page/network_property_list.js
index b50a756..006feca4 100644
--- a/chrome/browser/resources/settings/internet_page/network_property_list.js
+++ b/chrome/browser/resources/settings/internet_page/network_property_list.js
@@ -58,7 +58,7 @@
    * Event triggered when an input field changes. Fires a 'property-change'
    * event with the field (property) name set to the target id, and the value
    * set to the target input value.
-   * @param {Event} event The input change event.
+   * @param {!Event} event The input change event.
    * @private
    */
   onValueChange_: function(event) {
diff --git a/chrome/browser/resources/settings/internet_page/network_proxy.js b/chrome/browser/resources/settings/internet_page/network_proxy.js
index c38e5ca..0812388 100644
--- a/chrome/browser/resources/settings/internet_page/network_proxy.js
+++ b/chrome/browser/resources/settings/internet_page/network_proxy.js
@@ -319,7 +319,7 @@
 
   /**
    * Event triggered when a proxy exclusion is added.
-   * @param {Event} event The add proxy exclusion event.
+   * @param {!Event} event The add proxy exclusion event.
    * @private
    */
   onAddProxyExclusionTap_: function(event) {
@@ -334,7 +334,7 @@
 
   /**
    * Event triggered when the proxy exclusion list changes.
-   * @param {Event} event The remove proxy exclusions change event.
+   * @param {!Event} event The remove proxy exclusions change event.
    * @private
    */
   onProxyExclusionsChange_: function(event) {
@@ -462,7 +462,7 @@
   /**
    * Handles the change event for the shared proxy checkbox. Shows a
    * confirmation dialog.
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   onAllowSharedProxiesChange_: function(event) {
diff --git a/chrome/browser/resources/settings/internet_page/network_siminfo.js b/chrome/browser/resources/settings/internet_page/network_siminfo.js
index 0dcb4a9..06a1c3c3 100644
--- a/chrome/browser/resources/settings/internet_page/network_siminfo.js
+++ b/chrome/browser/resources/settings/internet_page/network_siminfo.js
@@ -117,7 +117,7 @@
 
   /**
    * Opens the pin dialog when the sim lock enabled state changes.
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   onSimLockEnabledChange_: function(event) {
@@ -131,7 +131,7 @@
 
   /**
    * Sends the PIN value from the Enter PIN dialog.
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   sendEnterPin_: function(event) {
@@ -174,7 +174,7 @@
 
   /**
    * Sends the old and new PIN values from the Change PIN dialog.
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   sendChangePin_: function(event) {
@@ -213,7 +213,7 @@
 
   /**
    * Sends the PIN value from the Unlock PIN dialog.
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   sendUnlockPin_: function(event) {
@@ -244,7 +244,7 @@
 
   /**
    * Sends the PUK value and new PIN value from the Unblock PUK dialog.
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   sendUnlockPuk_: function(event) {
diff --git a/chrome/browser/resources/settings/passwords_and_forms_page/password_list_item.html b/chrome/browser/resources/settings/passwords_and_forms_page/password_list_item.html
index 2b5dbd4..5301e5b 100644
--- a/chrome/browser/resources/settings/passwords_and_forms_page/password_list_item.html
+++ b/chrome/browser/resources/settings/passwords_and_forms_page/password_list_item.html
@@ -22,15 +22,13 @@
     <div class="list-item" focus-row-container>
       <div class="website-column no-min-width"
           title="[[item.loginPair.urls.link]]">
-        <a id="originUrl" target="_blank" class="selectable no-min-width"
+        <a id="originUrl" target="_blank" class="no-min-width"
             href="[[item.loginPair.urls.link]]"
             focus-row-control focus-type="originUrl">
-          <span class="text-elide">
-            [[item.loginPair.urls.shown]]
-          </span>
+          <span class="text-elide">[[item.loginPair.urls.shown]]</span>
         </a>
       </div>
-      <div class="username-column selectable text-elide"
+      <div class="username-column text-elide"
            id="username">[[item.loginPair.username]]</div>
       <div class="password-column">
         <template is="dom-if" if="[[!item.federationText]]">
@@ -41,9 +39,7 @@
           </input>
         </template>
         <template is="dom-if" if="[[item.federationText]]">
-          <span class="password-field selectable text-elide">
-            [[item.federationText]]
-          </span>
+          <span class="password-field text-elide">[[item.federationText]]</span>
         </template>
         <button is="paper-icon-button-light" id="passwordMenu"
             class="icon-more-vert" on-tap="onPasswordMenuTap_"
diff --git a/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.html b/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.html
index df0d3e5..cd9e9052 100644
--- a/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.html
+++ b/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.html
@@ -99,8 +99,9 @@
           filter="[[passwordExceptionFilter_(filter)]]">
         <div class="list-item">
           <div class="start">
-            <a id="exception" href="[[item.urls.link]]" target="_blank"
-                class="selectable">[[item.urls.shown]]</a>
+            <a id="exception" href="[[item.urls.link]]" target="_blank">
+              [[item.urls.shown]]
+            </a>
           </div>
           <button is="paper-icon-button-light" id="removeExceptionButton"
               class="icon-clear" on-tap="onRemoveExceptionButtonTap_"
diff --git a/chrome/browser/resources/settings/passwords_and_forms_page/passwords_shared_css.html b/chrome/browser/resources/settings/passwords_and_forms_page/passwords_shared_css.html
index 1430a4af..0933fe0 100644
--- a/chrome/browser/resources/settings/passwords_and_forms_page/passwords_shared_css.html
+++ b/chrome/browser/resources/settings/passwords_and_forms_page/passwords_shared_css.html
@@ -34,10 +34,6 @@
         height: 20px;
         width: 0;
       }
-
-      .selectable {
-        -webkit-user-select: text;
-      }
     </style>
   </template>
 </dom-module>
diff --git a/chrome/browser/resources/settings/people_page/sync_page.js b/chrome/browser/resources/settings/people_page/sync_page.js
index 35c3b47..779ff49 100644
--- a/chrome/browser/resources/settings/people_page/sync_page.js
+++ b/chrome/browser/resources/settings/people_page/sync_page.js
@@ -293,7 +293,7 @@
   /**
    * Sends the newly created custom sync passphrase to the browser.
    * @private
-   * @param {Event} e
+   * @param {!Event} e
    */
   onSaveNewPassphraseTap_: function(e) {
     assert(this.creatingNewPassphrase_);
@@ -320,7 +320,7 @@
   /**
    * Sends the user-entered existing password to re-enable sync.
    * @private
-   * @param {Event} e
+   * @param {!Event} e
    */
   onSubmitExistingPassphraseTap_: function(e) {
     if (e.type == 'keypress' && e.key != 'Enter')
diff --git a/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.html b/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.html
index b030d51..2c12065 100644
--- a/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.html
+++ b/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.html
@@ -298,7 +298,7 @@
             <div class="label">$i18n{printerManufacturer}</div>
             <div class="secondary">
               <drop-down-search-box items="[[manufacturerList]]"
-                  selected-item="{{newPrinter.printerManufacturer}}">
+                  selected-item="{{newPrinter.ppdManufacturer}}">
               </drop-down-search-box>
             </div>
           </div>
@@ -308,7 +308,7 @@
             <div class="label">$i18n{printerModel}</div>
             <div class="secondary">
               <drop-down-search-box items="[[modelList]]"
-                  selected-item="{{newPrinter.printerModel}}">
+                  selected-item="{{newPrinter.ppdModel}}">
               </drop-down-search-box>
             </div>
           </div>
@@ -335,8 +335,8 @@
           $i18n{cancelButtonText}
         </paper-button>
         <paper-button class="action-button" id="addPrinterButton"
-            disabled="[[!canAddPrinter_(newPrinter.printerManufacturer,
-                                        newPrinter.printerModel,
+            disabled="[[!canAddPrinter_(newPrinter.ppdManufacturer,
+                                        newPrinter.ppdModel,
                                         newPrinter.printerPPDPath)]]"
             on-tap="switchToConfiguringDialog_">
           $i18n{addPrinterButtonText}
diff --git a/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.js b/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.js
index 0fee051c..2cccb4b 100644
--- a/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.js
+++ b/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.js
@@ -39,6 +39,8 @@
  */
 function getEmptyPrinter_() {
   return {
+    ppdManufacturer: '',
+    ppdModel: '',
     printerAddress: '',
     printerAutoconf: false,
     printerDescription: '',
@@ -138,8 +140,8 @@
     // If we're switching to the manufacturer/model dialog, clear the existing
     // data we have about the PPD (if any), as we're dropping that in favor of
     // user selections.
-    this.selectedPrinter.printerManufacturer = '';
-    this.selectedPrinter.printerModel = '';
+    this.selectedPrinter.ppdManufacturer = '';
+    this.selectedPrinter.ppdModel = '';
     this.selectedPrinter.printerPPDPath = '';
     this.$$('add-printer-dialog').close();
     this.fire('open-manufacturer-model-dialog');
@@ -218,7 +220,7 @@
   },
 
   observers: [
-    'selectedManufacturerChanged_(newPrinter.printerManufacturer)',
+    'selectedManufacturerChanged_(newPrinter.ppdManufacturer)',
   ],
 
   /** @override */
@@ -235,7 +237,7 @@
    */
   selectedManufacturerChanged_: function(manufacturer) {
     // Reset model if manufacturer is changed.
-    this.set('newPrinter.printerModel', '');
+    this.set('newPrinter.ppdModel', '');
     if (manufacturer) {
       settings.CupsPrintersBrowserProxyImpl.getInstance()
           .getCupsPrinterModelsList(manufacturer)
@@ -298,14 +300,14 @@
   },
 
   /**
-   * @param {string} printerManufacturer
-   * @param {string} printerModel
+   * @param {string} ppdManufacturer
+   * @param {string} ppdModel
    * @param {string} printerPPDPath
    * @return {boolean} Whether we have enough information to set up the printer
    * @private
    */
-  canAddPrinter_: function(printerManufacturer, printerModel, printerPPDPath) {
-    return !!((printerManufacturer && printerModel) || printerPPDPath);
+  canAddPrinter_: function(ppdManufacturer, ppdModel, printerPPDPath) {
+    return !!((ppdManufacturer && ppdModel) || printerPPDPath);
   },
 });
 
diff --git a/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.js b/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.js
index ecf3558..fcfa23d4 100644
--- a/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.js
+++ b/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.js
@@ -55,7 +55,7 @@
   },
 
   /**
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   onTap_: function(event) {
diff --git a/chrome/browser/resources/settings/printing_page/cups_printer_details_page.js b/chrome/browser/resources/settings/printing_page/cups_printer_details_page.js
index 5739857..d1ff0a0 100644
--- a/chrome/browser/resources/settings/printing_page/cups_printer_details_page.js
+++ b/chrome/browser/resources/settings/printing_page/cups_printer_details_page.js
@@ -40,7 +40,7 @@
   },
 
   /**
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   toggleAdvancedExpanded_: function(event) {
diff --git a/chrome/browser/resources/settings/printing_page/cups_printers_browser_proxy.js b/chrome/browser/resources/settings/printing_page/cups_printers_browser_proxy.js
index 2a5eb45..a877d88 100644
--- a/chrome/browser/resources/settings/printing_page/cups_printers_browser_proxy.js
+++ b/chrome/browser/resources/settings/printing_page/cups_printers_browser_proxy.js
@@ -9,6 +9,8 @@
 
 /**
  * @typedef {{
+ *   ppdManufacturer: string,
+ *   ppdModel: string,
  *   printerAddress: string,
  *   printerAutoconf: boolean,
  *   printerDescription: string,
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.js b/chrome/browser/resources/settings/privacy_page/privacy_page.js
index 8f00696..4c6061ec 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_page.js
+++ b/chrome/browser/resources/settings/privacy_page/privacy_page.js
@@ -145,7 +145,7 @@
   },
 
   /**
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   onDoNotTrackDomChange_: function(event) {
@@ -156,7 +156,7 @@
   /**
    * Handles the change event for the do-not-track toggle. Shows a
    * confirmation dialog when enabling the setting.
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   onDoNotTrackChange_: function(event) {
@@ -289,7 +289,7 @@
   },
 
   /**
-   * @param {Event} e
+   * @param {!Event} e
    * @private
    */
   onRestartTap_: function(e) {
diff --git a/chrome/browser/resources/settings/search_page/search_page.js b/chrome/browser/resources/settings/search_page/search_page.js
index 54c52a0..3ac0946 100644
--- a/chrome/browser/resources/settings/search_page/search_page.js
+++ b/chrome/browser/resources/settings/search_page/search_page.js
@@ -97,7 +97,7 @@
   },
 
   /**
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   onHotwordSearchEnableChange_: function(event) {
@@ -167,7 +167,7 @@
   },
 
   /**
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   doNothing_: function(event) {
diff --git a/chrome/browser/resources/settings/settings_ui/settings_ui.js b/chrome/browser/resources/settings/settings_ui/settings_ui.js
index 4ac2c36..9439e21 100644
--- a/chrome/browser/resources/settings/settings_ui/settings_ui.js
+++ b/chrome/browser/resources/settings/settings_ui/settings_ui.js
@@ -234,7 +234,7 @@
   },
 
   /**
-   * @param {Event} event
+   * @param {!Event} event
    * @private
    */
   onIronActivate_: function(event) {
diff --git a/chrome/browser/resources/settings/site_settings/add_site_dialog.js b/chrome/browser/resources/settings/site_settings/add_site_dialog.js
index 91ceb61..c61483a 100644
--- a/chrome/browser/resources/settings/site_settings/add_site_dialog.js
+++ b/chrome/browser/resources/settings/site_settings/add_site_dialog.js
@@ -21,7 +21,7 @@
 
     /**
      * Whether this is about an Allow, Block, SessionOnly, or other.
-     * @type {settings.PermissionValues}
+     * @type {settings.ContentSetting}
      */
     contentSetting: String,
 
@@ -47,7 +47,7 @@
       this.$.incognito.checked = false;
       this.showIncognitoSessionOnly_ = hasIncognito &&
           !loadTimeData.getBoolean('isGuest') &&
-          this.contentSetting != settings.PermissionValues.SESSION_ONLY;
+          this.contentSetting != settings.ContentSetting.SESSION_ONLY;
     }.bind(this));
     this.browserProxy.updateIncognitoStatus();
     this.$.dialog.showModal();
diff --git a/chrome/browser/resources/settings/site_settings/all_sites.html b/chrome/browser/resources/settings/site_settings/all_sites.html
index d7e4ec61..47fa36b 100644
--- a/chrome/browser/resources/settings/site_settings/all_sites.html
+++ b/chrome/browser/resources/settings/site_settings/all_sites.html
@@ -11,10 +11,6 @@
       :host {
         display: block;
       }
-
-      .selectable {
-        -webkit-user-select: text;
-      }
     </style>
     <div class="list-frame" hidden$="[[sites.length]]">
       <div class="list-item secondary">$i18n{noSitesAdded}</div>
@@ -27,7 +23,7 @@
             <div class="favicon-image"
                 style$="[[computeSiteIcon(item.origin)]]">
             </div>
-            <div class="middle no-min-width selectable text-elide"
+            <div class="middle no-min-width text-elide"
                 id="displayName">
               [[item.displayName]]
             </div>
diff --git a/chrome/browser/resources/settings/site_settings/category_default_setting.js b/chrome/browser/resources/settings/site_settings/category_default_setting.js
index a150324..aa82e8d 100644
--- a/chrome/browser/resources/settings/site_settings/category_default_setting.js
+++ b/chrome/browser/resources/settings/site_settings/category_default_setting.js
@@ -96,8 +96,8 @@
         // "Allowed" vs "Blocked".
         this.browserProxy.setDefaultValueForContentType(
             this.category,
-            this.categoryEnabled ? settings.PermissionValues.ALLOW :
-                                   settings.PermissionValues.BLOCK);
+            this.categoryEnabled ? settings.ContentSetting.ALLOW :
+                                   settings.ContentSetting.BLOCK);
         break;
       case settings.ContentSettingsTypes.AUTOMATIC_DOWNLOADS:
       case settings.ContentSettingsTypes.CAMERA:
@@ -109,27 +109,27 @@
         // "Ask" vs "Blocked".
         this.browserProxy.setDefaultValueForContentType(
             this.category,
-            this.categoryEnabled ? settings.PermissionValues.ASK :
-                                   settings.PermissionValues.BLOCK);
+            this.categoryEnabled ? settings.ContentSetting.ASK :
+                                   settings.ContentSetting.BLOCK);
         break;
       case settings.ContentSettingsTypes.COOKIES:
         // This category is tri-state: "Allow", "Block", "Keep data until
         // browser quits".
-        var value = settings.PermissionValues.BLOCK;
+        var value = settings.ContentSetting.BLOCK;
         if (this.categoryEnabled) {
           value = this.subControlParams_.value ?
-              settings.PermissionValues.SESSION_ONLY :
-              settings.PermissionValues.ALLOW;
+              settings.ContentSetting.SESSION_ONLY :
+              settings.ContentSetting.ALLOW;
         }
         this.browserProxy.setDefaultValueForContentType(this.category, value);
         break;
       case settings.ContentSettingsTypes.PLUGINS:
         // This category is tri-state: "Allow", "Block", "Ask before running".
-        var value = settings.PermissionValues.BLOCK;
+        var value = settings.ContentSetting.BLOCK;
         if (this.categoryEnabled) {
           value = this.subControlParams_.value ?
-              settings.PermissionValues.IMPORTANT_CONTENT :
-              settings.PermissionValues.ALLOW;
+              settings.ContentSetting.IMPORTANT_CONTENT :
+              settings.ContentSetting.ALLOW;
         }
         this.browserProxy.setDefaultValueForContentType(this.category, value);
         break;
@@ -174,11 +174,11 @@
     if (this.category == settings.ContentSettingsTypes.PLUGINS ||
         this.category == settings.ContentSettingsTypes.COOKIES) {
       if (this.category == settings.ContentSettingsTypes.PLUGINS &&
-          update.setting == settings.PermissionValues.IMPORTANT_CONTENT) {
+          update.setting == settings.ContentSetting.IMPORTANT_CONTENT) {
         subPrefValue = true;
       } else if (
           this.category == settings.ContentSettingsTypes.COOKIES &&
-          update.setting == settings.PermissionValues.SESSION_ONLY) {
+          update.setting == settings.ContentSetting.SESSION_ONLY) {
         subPrefValue = true;
       }
     }
@@ -200,14 +200,14 @@
           // Flash only shows ALLOW or BLOCK descriptions on the toggle.
           var setting = defaultValue.setting;
           if (this.category == settings.ContentSettingsTypes.PLUGINS &&
-              setting == settings.PermissionValues.IMPORTANT_CONTENT) {
-            setting = settings.PermissionValues.ALLOW;
+              setting == settings.ContentSetting.IMPORTANT_CONTENT) {
+            setting = settings.ContentSetting.ALLOW;
           } else if (
               this.category == settings.ContentSettingsTypes.COOKIES &&
-              setting == settings.PermissionValues.SESSION_ONLY) {
-            setting = settings.PermissionValues.ALLOW;
+              setting == settings.ContentSetting.SESSION_ONLY) {
+            setting = settings.ContentSetting.ALLOW;
           }
-          var categoryEnabled = setting != settings.PermissionValues.BLOCK;
+          var categoryEnabled = setting != settings.ContentSetting.BLOCK;
           this.optionLabel_ =
               categoryEnabled ? this.toggleOnLabel : this.toggleOffLabel;
         }.bind(this));
diff --git a/chrome/browser/resources/settings/site_settings/category_setting_exceptions.html b/chrome/browser/resources/settings/site_settings/category_setting_exceptions.html
index e5ac51d..ab0925d 100644
--- a/chrome/browser/resources/settings/site_settings/category_setting_exceptions.html
+++ b/chrome/browser/resources/settings/site_settings/category_setting_exceptions.html
@@ -17,19 +17,19 @@
     </style>
     <site-list
         category="[[category]]"
-        category-subtype="[[PermissionValues.BLOCK]]"
+        category-subtype="[[ContentSetting.BLOCK]]"
         category-header="$i18n{siteSettingsBlock}"
         read-only-list="[[readOnlyList]]">
     </site-list>
     <site-list
         category="[[category]]"
-        category-subtype="[[PermissionValues.SESSION_ONLY]]"
+        category-subtype="[[ContentSetting.SESSION_ONLY]]"
         category-header="$i18n{siteSettingsSessionOnly}"
         read-only-list="[[readOnlyList]]">
     </site-list>
     <site-list
         category="[[category]]"
-        category-subtype="[[PermissionValues.ALLOW]]"
+        category-subtype="[[ContentSetting.ALLOW]]"
         category-header="$i18n{siteSettingsAllow}"
         read-only-list="[[readOnlyList]]">
     </site-list>
diff --git a/chrome/browser/resources/settings/site_settings/category_setting_exceptions.js b/chrome/browser/resources/settings/site_settings/category_setting_exceptions.js
index 0e457fe..0d4a210 100644
--- a/chrome/browser/resources/settings/site_settings/category_setting_exceptions.js
+++ b/chrome/browser/resources/settings/site_settings/category_setting_exceptions.js
@@ -24,6 +24,6 @@
 
   /** @override */
   ready: function() {
-    this.PermissionValues = settings.PermissionValues;
+    this.ContentSetting = settings.ContentSetting;
   },
 });
diff --git a/chrome/browser/resources/settings/site_settings/constants.js b/chrome/browser/resources/settings/site_settings/constants.js
index 46b5ba7..a494fcb 100644
--- a/chrome/browser/resources/settings/site_settings/constants.js
+++ b/chrome/browser/resources/settings/site_settings/constants.js
@@ -36,13 +36,12 @@
 };
 
 /**
- * Contains the possible string values for a given contentSettingsType.
+ * Contains the possible string values for a given ContentSettingsTypes.
+ * This should be kept in sync with the |ContentSetting| enum in
+ * components/content_settings/core/common/content_settings.h
  * @enum {string}
- *
- * TODO(dschuyler): This should be rename as ContentSetting to maintain
- * nomenclature with C++.
  */
-settings.PermissionValues = {
+settings.ContentSetting = {
   DEFAULT: 'default',
   ALLOW: 'allow',
   BLOCK: 'block',
diff --git a/chrome/browser/resources/settings/site_settings/site_data_details_subpage.html b/chrome/browser/resources/settings/site_settings/site_data_details_subpage.html
index 8d66ad5..2006306 100644
--- a/chrome/browser/resources/settings/site_settings/site_data_details_subpage.html
+++ b/chrome/browser/resources/settings/site_settings/site_data_details_subpage.html
@@ -17,7 +17,6 @@
 
       .secondary,
       .start {
-        -webkit-user-select: text;
         max-width: 100%;
         word-wrap: break-word;
       }
diff --git a/chrome/browser/resources/settings/site_settings/site_details_permission.html b/chrome/browser/resources/settings/site_settings/site_details_permission.html
index 42a62ef..2d90097 100644
--- a/chrome/browser/resources/settings/site_settings/site_details_permission.html
+++ b/chrome/browser/resources/settings/site_settings/site_details_permission.html
@@ -23,13 +23,13 @@
           <select id="permission" class="md-select"
               aria-labelledby="permissionHeader"
               on-change="onPermissionSelectionChange_">
-            <option id="allow" value$="[[PermissionValues.ALLOW]]">
+            <option id="allow" value$="[[ContentSetting.ALLOW]]">
               $i18n{siteSettingsActionAllow}
             </option>
-            <option id="block" value$="[[PermissionValues.BLOCK]]">
+            <option id="block" value$="[[ContentSetting.BLOCK]]">
               $i18n{siteSettingsActionBlock}
             </option>
-            <option id="sessionOnly" value$="[[PermissionValues.SESSION_ONLY]]"
+            <option id="sessionOnly" value$="[[ContentSetting.SESSION_ONLY]]"
                 hidden$="[[!isCookiesCategory_(category)]]">
               $i18n{siteSettingsActionSessionOnly}
             </option>
diff --git a/chrome/browser/resources/settings/site_settings/site_list.html b/chrome/browser/resources/settings/site_settings/site_list.html
index acc8a13..41e9abf 100644
--- a/chrome/browser/resources/settings/site_settings/site_list.html
+++ b/chrome/browser/resources/settings/site_settings/site_list.html
@@ -20,11 +20,7 @@
 
 <dom-module id="site-list">
   <template>
-    <style include="settings-shared iron-flex">
-      .selectable {
-        -webkit-user-select: text;
-      }
-    </style>
+    <style include="settings-shared iron-flex"></style>
     <div id="category">
       <div class="settings-box first">
         <h2 class="start">[[categoryHeader]]</h2>
@@ -71,10 +67,10 @@
                   style$="[[computeSiteIcon(item.origin)]]">
               </div>
               <div class="middle no-min-width">
-                <div class="selectable text-elide">[[item.displayName]]</div>
+                <div class="text-elide">[[item.displayName]]</div>
 
                 <!-- This div must not contain extra whitespace. -->
-                <div class="selectable secondary text-elide"
+                <div class="secondary text-elide"
                     id="siteDescription">[[computeSiteDescription_(item)]]</div>
               </div>
               <template is="dom-if" if="[[enableSiteSettings_]]">
diff --git a/chrome/browser/resources/settings/site_settings/site_list.js b/chrome/browser/resources/settings/site_settings/site_list.js
index 8fe62c5..0cd04db 100644
--- a/chrome/browser/resources/settings/site_settings/site_list.js
+++ b/chrome/browser/resources/settings/site_settings/site_list.js
@@ -137,7 +137,7 @@
   onIncognitoStatusChanged_: function() {
     // The SESSION_ONLY list won't have any incognito exceptions. (Minor
     // optimization, not required).
-    if (this.categorySubtype == settings.PermissionValues.SESSION_ONLY)
+    if (this.categorySubtype == settings.ContentSetting.SESSION_ONLY)
       return;
 
     // A change notification is not sent for each site. So we repopulate the
@@ -161,7 +161,7 @@
     this.populateList_();
 
     // The Session permissions are only for cookies.
-    if (this.categorySubtype == settings.PermissionValues.SESSION_ONLY) {
+    if (this.categorySubtype == settings.ContentSetting.SESSION_ONLY) {
       this.$.category.hidden =
           this.category != settings.ContentSettingsTypes.COOKIES;
     }
@@ -244,7 +244,7 @@
     for (var i = 0; i < data.length; ++i) {
       var exceptionList = data[i];
       for (var k = 0; k < exceptionList.length; ++k) {
-        if (exceptionList[k].setting == settings.PermissionValues.DEFAULT ||
+        if (exceptionList[k].setting == settings.ContentSetting.DEFAULT ||
             exceptionList[k].setting != this.categorySubtype) {
           continue;
         }
@@ -283,11 +283,11 @@
    */
   setUpActionMenu_: function() {
     this.showAllowAction_ =
-        this.categorySubtype != settings.PermissionValues.ALLOW;
+        this.categorySubtype != settings.ContentSetting.ALLOW;
     this.showBlockAction_ =
-        this.categorySubtype != settings.PermissionValues.BLOCK;
+        this.categorySubtype != settings.ContentSetting.BLOCK;
     this.showSessionOnlyAction_ =
-        this.categorySubtype != settings.PermissionValues.SESSION_ONLY &&
+        this.categorySubtype != settings.ContentSetting.SESSION_ONLY &&
         this.category == settings.ContentSettingsTypes.COOKIES;
   },
 
@@ -330,32 +330,32 @@
   },
 
   /**
-   * @param {string} permissionValue
+   * @param {!settings.ContentSetting} contentSetting
    * @private
    */
-  setPermissionForActionMenuSite_: function(permissionValue) {
+  setContentSettingForActionMenuSite_: function(contentSetting) {
     assert(this.actionMenuSite_);
     this.browserProxy.setCategoryPermissionForOrigin(
         this.actionMenuSite_.origin, this.actionMenuSite_.embeddingOrigin,
-        this.category, permissionValue, this.actionMenuSite_.incognito);
+        this.category, contentSetting, this.actionMenuSite_.incognito);
   },
 
   /** @private */
   onAllowTap_: function() {
-    this.setPermissionForActionMenuSite_(settings.PermissionValues.ALLOW);
+    this.setContentSettingForActionMenuSite_(settings.ContentSetting.ALLOW);
     this.closeActionMenu_();
   },
 
   /** @private */
   onBlockTap_: function() {
-    this.setPermissionForActionMenuSite_(settings.PermissionValues.BLOCK);
+    this.setContentSettingForActionMenuSite_(settings.ContentSetting.BLOCK);
     this.closeActionMenu_();
   },
 
   /** @private */
   onSessionOnlyTap_: function() {
-    this.setPermissionForActionMenuSite_(
-        settings.PermissionValues.SESSION_ONLY);
+    this.setContentSettingForActionMenuSite_(
+        settings.ContentSetting.SESSION_ONLY);
     this.closeActionMenu_();
   },
 
diff --git a/chrome/browser/resources/settings/site_settings/site_settings_behavior.js b/chrome/browser/resources/settings/site_settings/site_settings_behavior.js
index de28654..81100e3 100644
--- a/chrome/browser/resources/settings/site_settings/site_settings_behavior.js
+++ b/chrome/browser/resources/settings/site_settings/site_settings_behavior.js
@@ -47,7 +47,7 @@
 
   /** @override */
   ready: function() {
-    this.PermissionValues = settings.PermissionValues;
+    this.ContentSetting = settings.ContentSetting;
   },
 
   /**
@@ -112,7 +112,7 @@
    * @private
    */
   computeIsSettingEnabled: function(setting) {
-    return setting != settings.PermissionValues.BLOCK;
+    return setting != settings.ContentSetting.BLOCK;
   },
 
   /**
diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_page.js b/chrome/browser/resources/settings/site_settings_page/site_settings_page.js
index ce8e6fd..a8cbdab 100644
--- a/chrome/browser/resources/settings/site_settings_page/site_settings_page.js
+++ b/chrome/browser/resources/settings/site_settings_page/site_settings_page.js
@@ -124,16 +124,16 @@
   },
 
   /**
-   * @param {string} setting Value from settings.PermissionValues.
+   * @param {string} setting Value from settings.ContentSetting.
    * @param {string} enabled Non-block label ('feature X not allowed').
    * @param {string} disabled Block label (likely just, 'Blocked').
    * @param {?string} other Tristate value (maybe, 'session only').
    * @private
    */
   defaultSettingLabel_: function(setting, enabled, disabled, other) {
-    if (setting == settings.PermissionValues.BLOCK)
+    if (setting == settings.ContentSetting.BLOCK)
       return disabled;
-    if (setting == settings.PermissionValues.ALLOW)
+    if (setting == settings.ContentSetting.ALLOW)
       return enabled;
     if (other)
       return other;
@@ -162,8 +162,8 @@
     var category = settings.ContentSettingsTypes.PROTOCOL_HANDLERS;
     this.set(
         'default_.' + Polymer.CaseMap.dashToCamelCase(category),
-        enabled ? settings.PermissionValues.ALLOW :
-                  settings.PermissionValues.BLOCK);
+        enabled ? settings.ContentSetting.ALLOW :
+                  settings.ContentSetting.BLOCK);
   },
 
   /**
diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
index baf6c2b..8f8bdd1 100644
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
@@ -135,7 +135,7 @@
         g_browser_process->safe_browsing_service()
             ->trigger_manager()
             ->StartCollectingThreatDetails(
-                SafeBrowsingTriggerType::SECURITY_INTERSTITIAL, web_contents,
+                TriggerType::SECURITY_INTERSTITIAL, web_contents,
                 unsafe_resources[0], profile->GetRequestContext(),
                 HistoryServiceFactory::GetForProfile(
                     profile, ServiceAccessType::EXPLICIT_ACCESS),
@@ -199,8 +199,8 @@
   bool report_sent = g_browser_process->safe_browsing_service()
                          ->trigger_manager()
                          ->FinishCollectingThreatDetails(
-                             SafeBrowsingTriggerType::SECURITY_INTERSTITIAL,
-                             web_contents(), delay, did_proceed, num_visits,
+                             TriggerType::SECURITY_INTERSTITIAL, web_contents(),
+                             delay, did_proceed, num_visits,
                              sb_error_ui()->get_error_display_options());
 
   if (report_sent) {
diff --git a/chrome/browser/ui/app_list/arc/arc_app_test.cc b/chrome/browser/ui/app_list/arc/arc_app_test.cc
index 95d105a..69e3bc9 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_test.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_test.cc
@@ -82,7 +82,7 @@
     ArcAppListPrefsFactory::GetInstance()->RecreateServiceInstanceForTesting(
         profile_);
   }
-  arc_service_manager_ = base::MakeUnique<arc::ArcServiceManager>(nullptr);
+  arc_service_manager_ = base::MakeUnique<arc::ArcServiceManager>();
   arc_session_manager_ = base::MakeUnique<arc::ArcSessionManager>(
       base::MakeUnique<arc::ArcSessionRunner>(
           base::Bind(arc::FakeArcSession::Create)));
diff --git a/chrome/browser/ui/passwords/manage_passwords_test.cc b/chrome/browser/ui/passwords/manage_passwords_test.cc
index 6e3ff50b..c79743a 100644
--- a/chrome/browser/ui/passwords/manage_passwords_test.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_test.cc
@@ -71,6 +71,7 @@
       new password_manager::PasswordFormManager(
           nullptr, &client_, driver_.AsWeakPtr(), *test_form(),
           base::WrapUnique(new password_manager::StubFormSaver), &fetcher_));
+  test_form_manager->Init(nullptr);
   fetcher_.SetNonFederated(std::vector<const autofill::PasswordForm*>(), 0u);
   GetController()->OnPasswordSubmitted(std::move(test_form_manager));
 }
@@ -80,6 +81,7 @@
       new password_manager::PasswordFormManager(
           nullptr, &client_, driver_.AsWeakPtr(), *test_form(),
           base::WrapUnique(new password_manager::StubFormSaver), &fetcher_));
+  test_form_manager->Init(nullptr);
   fetcher_.SetNonFederated(std::vector<const autofill::PasswordForm*>(), 0u);
   GetController()->OnAutomaticPasswordSave(std::move(test_form_manager));
 }
diff --git a/chrome/browser/ui/toolbar/chrome_toolbar_model_delegate.cc b/chrome/browser/ui/toolbar/chrome_toolbar_model_delegate.cc
index 643a331..0f749b4 100644
--- a/chrome/browser/ui/toolbar/chrome_toolbar_model_delegate.cc
+++ b/chrome/browser/ui/toolbar/chrome_toolbar_model_delegate.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/ui/toolbar/chrome_toolbar_model_delegate.h"
 
 #include "base/logging.h"
+#include "build/build_config.h"
 #include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search/search.h"
@@ -22,7 +23,9 @@
 #include "content/public/common/url_constants.h"
 #include "extensions/common/constants.h"
 
-#if !defined(OS_ANDROID)
+#if defined(OS_ANDROID)
+#include "chrome/browser/android/offline_pages/offline_page_utils.h"
+#else
 #include "components/omnibox/browser/vector_icons.h" // nogncheck
 #include "components/toolbar/vector_icons.h"  // nogncheck
 #endif
@@ -126,6 +129,17 @@
   return nullptr;
 }
 
+bool ChromeToolbarModelDelegate::IsOfflinePage() const {
+#if defined(OS_ANDROID)
+  content::WebContents* web_contents = GetActiveWebContents();
+  return web_contents &&
+         offline_pages::OfflinePageUtils::GetOfflinePageFromWebContents(
+             web_contents);
+#else
+  return false;
+#endif
+}
+
 content::NavigationController*
 ChromeToolbarModelDelegate::GetNavigationController() const {
   // This |current_tab| can be null during the initialization of the toolbar
diff --git a/chrome/browser/ui/toolbar/chrome_toolbar_model_delegate.h b/chrome/browser/ui/toolbar/chrome_toolbar_model_delegate.h
index 4c60822..47e80de 100644
--- a/chrome/browser/ui/toolbar/chrome_toolbar_model_delegate.h
+++ b/chrome/browser/ui/toolbar/chrome_toolbar_model_delegate.h
@@ -37,6 +37,7 @@
   scoped_refptr<net::X509Certificate> GetCertificate() const override;
   bool FailsMalwareCheck() const override;
   const gfx::VectorIcon* GetVectorIconOverride() const override;
+  bool IsOfflinePage() const override;
 
   // Returns the navigation controller used to retrieve the navigation entry
   // from which the states are retrieved. If this returns null, default values
diff --git a/chrome/browser/ui/views/content_setting_bubble_contents.cc b/chrome/browser/ui/views/content_setting_bubble_contents.cc
index aa0cc15d..35c030e 100644
--- a/chrome/browser/ui/views/content_setting_bubble_contents.cc
+++ b/chrome/browser/ui/views/content_setting_bubble_contents.cc
@@ -317,14 +317,6 @@
       views::RadioButton* radio = new views::RadioButton(*i, 0);
       radio->SetEnabled(bubble_content.radio_group_enabled);
       radio->set_listener(this);
-      if (provider->IsHarmonyMode()) {
-        std::unique_ptr<views::LabelButtonBorder> border =
-            radio->CreateDefaultBorder();
-        gfx::Insets insets = border->GetInsets();
-        border->set_insets(
-            gfx::Insets(insets.top(), 0, insets.bottom(), insets.right()));
-        radio->SetBorder(std::move(border));
-      }
       radio_group_.push_back(radio);
       layout->StartRow(0, indented_kSingleColumnSetId);
       layout->AddView(radio);
diff --git a/chrome/browser/ui/views/harmony/harmony_layout_provider.cc b/chrome/browser/ui/views/harmony/harmony_layout_provider.cc
index 5dfe5751..29d289b 100644
--- a/chrome/browser/ui/views/harmony/harmony_layout_provider.cc
+++ b/chrome/browser/ui/views/harmony/harmony_layout_provider.cc
@@ -10,6 +10,12 @@
     case views::INSETS_BUBBLE_CONTENTS:
     case views::INSETS_DIALOG_CONTENTS:
       return gfx::Insets(kHarmonyLayoutUnit, kHarmonyLayoutUnit);
+    case views::INSETS_CHECKBOX_RADIO_BUTTON: {
+      gfx::Insets insets = ChromeLayoutProvider::GetInsetsMetric(metric);
+      // Material Design requires that checkboxes and radio buttons are aligned
+      // flush to the left edge.
+      return gfx::Insets(insets.top(), 0, insets.bottom(), insets.right());
+    }
     case views::INSETS_VECTOR_IMAGE_BUTTON:
       return gfx::Insets(kHarmonyLayoutUnit / 4);
     default:
diff --git a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc
index c8623b9..5efd3d29 100644
--- a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc
+++ b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller.cc
@@ -123,10 +123,16 @@
     std::move(on_added_).Run(profile);
     on_edited_.Reset();
   } else {
-    // Copy the temporary object's data to the object to be edited. Prefer this
-    // method to copying |profile| into |profile_to_edit_|, because the latter
-    // object needs to retain other properties (use count, use date, guid,
+    autofill::ServerFieldTypeSet all_fields;
+    profile_to_edit_->GetSupportedTypes(&all_fields);
+    // Clear all the address data in |profile_to_edit_|, in anticipation of
+    // adding only the fields present in the editor.  Prefer this method to
+    // copying |profile| into |profile_to_edit_|, because the latter object
+    // needs to retain other properties (use count, use date, guid,
     // etc.).
+    for (autofill::ServerFieldType type : all_fields)
+      profile_to_edit_->SetRawInfo(type, base::string16());
+
     bool success = SaveFieldsToProfile(profile_to_edit_,
                                        /*ignore_errors=*/false);
     DCHECK(success);
diff --git a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc
index dbd2a84..678ab22 100644
--- a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc
+++ b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc
@@ -6,6 +6,7 @@
 
 #include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/time/time.h"
 #include "chrome/browser/ui/views/payments/editor_view_controller.h"
 #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
@@ -38,7 +39,10 @@
 const char kAnyState[] = "any state";
 const char kAnyStateCode[] = "AS";
 const char kCountryWithoutStates[] = "Albania";
-const char kCountryWithoutStatesPhoneNumber[] = "42223446";
+const char kCountryWithoutStatesCode[] = "AL";
+const char kCountryWithoutStatesPhoneNumber[] = "+35542223446";
+
+const base::Time kJanuary2017 = base::Time::FromDoubleT(1484505871);
 
 }  // namespace
 
@@ -166,6 +170,24 @@
     return country_model->countries()[selected_country_row]->country_code();
   }
 
+  void SelectCountryInCombobox(const base::string16& country_name) {
+    ResetEventObserver(DialogEvent::EDITOR_VIEW_UPDATED);
+    views::Combobox* country_combobox = static_cast<views::Combobox*>(
+        dialog_view()->GetViewByID(EditorViewController::GetInputFieldViewId(
+            autofill::ADDRESS_HOME_COUNTRY)));
+    ASSERT_NE(nullptr, country_combobox);
+    autofill::CountryComboboxModel* country_model =
+        static_cast<autofill::CountryComboboxModel*>(country_combobox->model());
+    int i = 0;
+    for (; i < country_model->GetItemCount(); i++) {
+      if (country_model->GetItemAt(i) == country_name)
+        break;
+    }
+    country_combobox->SetSelectedRow(i);
+    country_combobox->OnBlur();
+    WaitForObservedEvent();
+  }
+
   PersonalDataLoadedObserverMock personal_data_observer_;
   autofill::TestRegionDataLoader test_region_data_loader_;
 
@@ -652,6 +674,66 @@
   EXPECT_TRUE(IsEditorTextfieldInvalid(autofill::PHONE_HOME_WHOLE_NUMBER));
 }
 
+// Tests that updating the country to one with no states clears the state value.
+IN_PROC_BROWSER_TEST_F(PaymentRequestShippingAddressEditorTest,
+                       UpdateToCountryWithoutState) {
+  // Create a profile in the US.
+  autofill::AutofillProfile california = autofill::test::GetFullProfile();
+  california.set_use_count(50U);
+  california.set_use_date(kJanuary2017);
+  AddAutofillProfile(california);  // California, USA.
+
+  InvokePaymentRequestUI();
+  SetRegionDataLoader(&test_region_data_loader_);
+  test_region_data_loader_.set_synchronous_callback(true);
+  std::vector<std::pair<std::string, std::string>> regions;
+  regions.push_back(std::make_pair("AK", "Alaska"));
+  regions.push_back(std::make_pair("CA", "California"));
+  test_region_data_loader_.SetRegionData(regions);
+  OpenShippingAddressSectionScreen();
+
+  // Opening the address editor by clicking the edit button.
+  views::View* list_view = dialog_view()->GetViewByID(
+      static_cast<int>(DialogViewID::SHIPPING_ADDRESS_SHEET_LIST_VIEW));
+  EXPECT_TRUE(list_view);
+  EXPECT_EQ(1, list_view->child_count());
+  views::View* edit_button = list_view->child_at(0)->GetViewByID(
+      static_cast<int>(DialogViewID::EDIT_ITEM_BUTTON));
+  ResetEventObserver(DialogEvent::SHIPPING_ADDRESS_EDITOR_OPENED);
+  ClickOnDialogViewAndWait(edit_button);
+
+  SelectCountryInCombobox(base::ASCIIToUTF16(kCountryWithoutStates));
+
+  // The phone number must be replaced by one that is valid for
+  // |kCountryWithoutStates|.
+  SetEditorTextfieldValue(base::ASCIIToUTF16(kCountryWithoutStatesPhoneNumber),
+                          autofill::PHONE_HOME_WHOLE_NUMBER);
+
+  ResetEventObserver(DialogEvent::BACK_TO_PAYMENT_SHEET_NAVIGATION);
+
+  // Verifying the data is in the DB.
+  autofill::PersonalDataManager* personal_data_manager = GetDataManager();
+  personal_data_manager->AddObserver(&personal_data_observer_);
+
+  // Wait until the web database has been updated and the notification sent.
+  base::RunLoop data_loop;
+  EXPECT_CALL(personal_data_observer_, OnPersonalDataChanged())
+      .WillOnce(QuitMessageLoop(&data_loop));
+  ClickOnDialogViewAndWait(DialogViewID::SAVE_ADDRESS_BUTTON);
+  data_loop.Run();
+
+  ASSERT_EQ(1UL, personal_data_manager->GetProfiles().size());
+  autofill::AutofillProfile* profile = personal_data_manager->GetProfiles()[0];
+  DCHECK(profile);
+  EXPECT_EQ(base::ASCIIToUTF16(kCountryWithoutStatesCode),
+            profile->GetRawInfo(autofill::ADDRESS_HOME_COUNTRY));
+  // State/Region is no longer set.
+  EXPECT_EQ(base::ASCIIToUTF16(""),
+            profile->GetRawInfo(autofill::ADDRESS_HOME_STATE));
+  EXPECT_EQ(50U, profile->use_count());
+  EXPECT_EQ(kJanuary2017, profile->use_date());
+}
+
 // Tests that there is no error label for an international phone from another
 // country.
 IN_PROC_BROWSER_TEST_F(
@@ -755,9 +837,6 @@
                   base::ASCIIToUTF16("INVALIDSTATE"), kLocale);
   AddAutofillProfile(profile);
 
-  LOG(ERROR) << profile.GetInfo(
-      autofill::AutofillType(autofill::ADDRESS_HOME_COUNTRY), kLocale);
-
   InvokePaymentRequestUI();
   SetRegionDataLoader(&test_region_data_loader_);
   test_region_data_loader_.set_synchronous_callback(false);
diff --git a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc
index 49a7f9a..dcfc342 100644
--- a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc
@@ -328,7 +328,6 @@
   std::string printer_model;
   std::string printer_address;
   std::string printer_protocol;
-  std::string printer_ppd_path;
   CHECK(printer_dict->GetString("printerId", &printer_id));
   CHECK(printer_dict->GetString("printerName", &printer_name));
   CHECK(printer_dict->GetString("printerDescription", &printer_description));
@@ -345,7 +344,14 @@
     printer_uri += "/" + printer_queue;
   }
 
-  // printerPPDPath might be null for an auto-discovered printer.
+  // Read PPD selection if it was used.
+  std::string ppd_manufacturer;
+  std::string ppd_model;
+  printer_dict->GetString("ppdManufacturer", &ppd_manufacturer);
+  printer_dict->GetString("ppdModel", &ppd_model);
+
+  // Read user provided PPD if it was used.
+  std::string printer_ppd_path;
   printer_dict->GetString("printerPPDPath", &printer_ppd_path);
 
   std::unique_ptr<Printer> printer = base::MakeUnique<Printer>(printer_id);
@@ -370,15 +376,29 @@
       return;
     }
     printer->mutable_ppd_reference()->user_supplied_ppd_url = tmp.spec();
-  } else if (!printer_manufacturer.empty() && !printer_model.empty()) {
+  } else if (!ppd_manufacturer.empty() && !ppd_model.empty()) {
     RecordPpdSource(kScs);
     // Using the manufacturer and model, get a ppd reference.
-    if (!ppd_provider_->GetPpdReference(printer_manufacturer, printer_model,
+    if (!ppd_provider_->GetPpdReference(ppd_manufacturer, ppd_model,
                                         printer->mutable_ppd_reference())) {
       LOG(ERROR) << "Failed to get ppd reference";
       OnAddPrinterError();
       return;
     }
+
+    if (printer->make_and_model().empty()) {
+      // In lieu of more accurate information, populate the make and model
+      // fields with the PPD information.
+      printer->set_manufacturer(ppd_manufacturer);
+      printer->set_model(ppd_model);
+      // PPD Model names are actually make and model.
+      printer->set_make_and_model(ppd_model);
+    }
+  } else {
+    // TODO(crbug.com/738514): Support PPD guessing for non-autoconf printers.
+    // i.e. !autoconf && !manufacturer.empty() && !model.empty()
+    NOTREACHED()
+        << "A configuration option must have been selected to add a printer";
   }
 
   // Copy the printer for the configurer.  Ownership needs to be transfered to
diff --git a/chrome/browser/win/jumplist.cc b/chrome/browser/win/jumplist.cc
index 9ab614b..ce24bb4 100644
--- a/chrome/browser/win/jumplist.cc
+++ b/chrome/browser/win/jumplist.cc
@@ -751,9 +751,6 @@
   }
 
   // TODO(chengx): Remove the UMA histogram after fixing http://crbug.com/40407.
-  UMA_HISTOGRAM_COUNTS_100("WinJumplist.CreateIconFilesCount", icons_created);
-
-  // TODO(chengx): Remove the UMA histogram after fixing http://crbug.com/40407.
   SCOPED_UMA_HISTOGRAM_TIMER("WinJumplist.UpdateJumpListDuration");
 
   base::ElapsedTimer add_custom_category_timer;
@@ -865,9 +862,6 @@
                               URLIconCache* icon_next) {
   DCHECK(icon_next);
 
-  // TODO(chengx): Remove the UMA histogram after fixing http://crbug.com/40407.
-  SCOPED_UMA_HISTOGRAM_TIMER("WinJumplist.CreateIconFilesDuration");
-
   int icons_created = 0;
 
   // Reuse icons for urls that already present in the current JumpList.
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 149f3e00d..e47a10f 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -296,9 +296,6 @@
 // Inform users that their browser is being controlled by an automated test.
 const char kEnableAutomation[] = "enable-automation";
 
-// Enables the benchmarking extensions.
-const char kEnableBenchmarking[]            = "enable-benchmarking";
-
 // Enables the multi-level undo system for bookmarks.
 const char kEnableBookmarkUndo[]            = "enable-bookmark-undo";
 
@@ -470,11 +467,6 @@
 // Forces Chrome to use localNTP instead of server (GWS) NTP.
 const char kForceLocalNtp[]                 = "force-local-ntp";
 
-// Forces additional Chrome Variation Ids that will be sent in X-Client-Data
-// header, specified as a 64-bit encoded list of numeric experiment ids. Ids
-// prefixed with the character "t" will be treated as Trigger Variation Ids.
-const char kForceVariationIds[]             = "force-variation-ids";
-
 // Specifies which page will be displayed in newly-opened tabs. We need this
 // for testing purposes so that the UI tests don't depend on what comes up for
 // http://google.com.
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index bdc29d2..fd32c06 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -99,7 +99,6 @@
 extern const char kEasyUnlockAppPath[];
 extern const char kEnableAudioDebugRecordingsFromExtension[];
 extern const char kEnableAutomation[];
-extern const char kEnableBenchmarking[];
 extern const char kEnableBookmarkUndo[];
 extern const char kEnableClearBrowsingDataCounters[];
 extern const char kEnableCloudPrintProxy[];
@@ -146,7 +145,6 @@
 extern const char kForceEnableMetricsReporting[];
 extern const char kForceFirstRun[];
 extern const char kForceLocalNtp[];
-extern const char kForceVariationIds[];
 extern const char kHomePage[];
 extern const char kHostRules[];
 extern const char kIgnoreCertificateErrorsSPKIList[];
diff --git a/chrome/common/profiling/memlog_sender.cc b/chrome/common/profiling/memlog_sender.cc
index 29d066f..49af001dd7 100644
--- a/chrome/common/profiling/memlog_sender.cc
+++ b/chrome/common/profiling/memlog_sender.cc
@@ -5,7 +5,6 @@
 #include "chrome/common/profiling/memlog_sender.h"
 
 #include "base/command_line.h"
-#include "base/strings/utf_string_conversions.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/profiling/memlog_allocator_shim.h"
 #include "chrome/common/profiling/memlog_sender_pipe.h"
@@ -20,7 +19,7 @@
 }
 
 void StartMemlogSender(const std::string& pipe_id) {
-  static MemlogSenderPipe pipe(base::UTF8ToUTF16(pipe_id));
+  static MemlogSenderPipe pipe(pipe_id);
   pipe.Connect();
 
   StreamHeader header;
diff --git a/chrome/common/profiling/memlog_sender_pipe_posix.cc b/chrome/common/profiling/memlog_sender_pipe_posix.cc
index 23cd27761..e7d6fe9 100644
--- a/chrome/common/profiling/memlog_sender_pipe_posix.cc
+++ b/chrome/common/profiling/memlog_sender_pipe_posix.cc
@@ -7,25 +7,31 @@
 #include <unistd.h>
 
 #include "base/logging.h"
-#include "base/posix/eintr_wrapper.h"
+#include "base/posix/unix_domain_socket_linux.h"
+#include "base/strings/string_number_conversions.h"
 #include "chrome/common/profiling/memlog_stream.h"
 
 namespace profiling {
 
-MemlogSenderPipe::MemlogSenderPipe(const std::string& pipe_id)
-    : pipe_id_(pipe_id), fd_(-1) {}
+MemlogSenderPipe::MemlogSenderPipe(const std::string& pipe_id) {
+  int fd;
+  CHECK(base::StringToInt(pipe_id, &fd));
+  fd_.reset(fd);
+
+  static std::vector<int> dummy_instance;
+  dummy_for_send_ = &dummy_instance;
+}
 
 MemlogSenderPipe::~MemlogSenderPipe() {
-  if (fd_ != -1)
-    IGNORE_EINTR(::close(fd_));
 }
 
 bool MemlogSenderPipe::Connect() {
-  return false;
+  // In posix-land, the pipe is just handed to us already connected.
+  return true;
 }
 
 bool MemlogSenderPipe::Send(const void* data, size_t sz) {
-  return false;
+  return base::UnixDomainSocket::SendMsg(fd_.get(), data, sz, *dummy_for_send_);
 }
 
 }  // namespace profiling
diff --git a/chrome/common/profiling/memlog_sender_pipe_posix.h b/chrome/common/profiling/memlog_sender_pipe_posix.h
index 41aef2f..4133816 100644
--- a/chrome/common/profiling/memlog_sender_pipe_posix.h
+++ b/chrome/common/profiling/memlog_sender_pipe_posix.h
@@ -6,7 +6,9 @@
 #define CHROME_COMMON_PROFILING_MEMLOG_SENDER_PIPE_POSIX_H_
 
 #include <string>
+#include <vector>
 
+#include "base/files/scoped_file.h"
 #include "base/macros.h"
 
 namespace profiling {
@@ -21,9 +23,11 @@
   bool Send(const void* data, size_t sz);
 
  private:
-  std::string pipe_id_;
+  base::ScopedFD fd_;
 
-  int fd_;
+  // Make base::UnixDomainSocket::SendMsg happy.
+  // TODO(ajwong): This is not really threadsafe. Fix.
+  std::vector<int>* dummy_for_send_ = nullptr;
 
   DISALLOW_COPY_AND_ASSIGN(MemlogSenderPipe);
 };
diff --git a/chrome/common/profiling/memlog_sender_pipe_win.cc b/chrome/common/profiling/memlog_sender_pipe_win.cc
index 746ccfd..6ab47c7f 100644
--- a/chrome/common/profiling/memlog_sender_pipe_win.cc
+++ b/chrome/common/profiling/memlog_sender_pipe_win.cc
@@ -5,12 +5,13 @@
 #include "chrome/common/profiling/memlog_sender_pipe_win.h"
 
 #include "base/logging.h"
+#include "base/strings/utf_string_conversions.h"
 #include "chrome/common/profiling/memlog_stream.h"
 
 namespace profiling {
 
-MemlogSenderPipe::MemlogSenderPipe(const base::string16& pipe_id)
-    : pipe_id_(pipe_id), handle_(INVALID_HANDLE_VALUE) {}
+MemlogSenderPipe::MemlogSenderPipe(const base::string& pipe_id)
+    : pipe_id_(base::UTF8ToUTF16(pipe_id)), handle_(INVALID_HANDLE_VALUE) {}
 
 MemlogSenderPipe::~MemlogSenderPipe() {
   if (handle_ != INVALID_HANDLE_VALUE)
diff --git a/chrome/common/profiling/memlog_sender_pipe_win.h b/chrome/common/profiling/memlog_sender_pipe_win.h
index 9abeb17..6b349c4 100644
--- a/chrome/common/profiling/memlog_sender_pipe_win.h
+++ b/chrome/common/profiling/memlog_sender_pipe_win.h
@@ -14,7 +14,7 @@
 
 class MemlogSenderPipe {
  public:
-  explicit MemlogSenderPipe(const base::string16& pipe_id);
+  explicit MemlogSenderPipe(const base::string& pipe_id);
   ~MemlogSenderPipe();
 
   bool Connect();
diff --git a/chrome/profiling/memlog_receiver_pipe_posix.cc b/chrome/profiling/memlog_receiver_pipe_posix.cc
index dbce9ca..38e7d60 100644
--- a/chrome/profiling/memlog_receiver_pipe_posix.cc
+++ b/chrome/profiling/memlog_receiver_pipe_posix.cc
@@ -7,44 +7,61 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/posix/eintr_wrapper.h"
-#include "base/strings/utf_string_conversions.h"
+#include "base/posix/unix_domain_socket_linux.h"
 #include "base/threading/thread.h"
 #include "chrome/profiling/memlog_stream_receiver.h"
 
 namespace profiling {
 
-MemlogReceiverPipe::CompletionThunk::CompletionThunk(int fd, Callback cb)
-    : controller_(FROM_HERE), fd_(fd), callback_(cb) {
-  base::MessageLoopForIO::current()->WatchFileDescriptor(
-      fd_, true, base::MessageLoopForIO::WATCH_READ, &controller_, this);
-}
+namespace {
 
-MemlogReceiverPipe::CompletionThunk::~CompletionThunk() {
-  if (fd_ != -1)
-    IGNORE_EINTR(::close(fd_));
-}
+// Use a large buffer for our pipe. We don't want the sender to block
+// if at all possible since it will slow the app down quite a bit.
+//
+// TODO(ajwong): Figure out how to size this. Currently the number is cribbed
+// from the right size for windows named pipes.
+const int kReadBufferSize = 1024 * 64;
 
-void MemlogReceiverPipe::CompletionThunk::OnFileCanReadWithoutBlocking(int fd) {
-  callback_.Run(fd);
-}
+}  // namespace
 
-void MemlogReceiverPipe::CompletionThunk::OnFileCanWriteWithoutBlocking(
-    int fd) {
-  NOTREACHED();
-}
-
-MemlogReceiverPipe::MemlogReceiverPipe(std::unique_ptr<CompletionThunk> thunk) {
+MemlogReceiverPipe::MemlogReceiverPipe(base::ScopedFD fd)
+    : fd_(std::move(fd)), read_buffer_(new char[kReadBufferSize]) {
+  static std::vector<base::ScopedFD> dummy_instance;
+  dummy_for_receive_ = &dummy_instance;
 }
 
 MemlogReceiverPipe::~MemlogReceiverPipe() {}
 
-void MemlogReceiverPipe::StartReadingOnIOThread() {
-  // TODO(ajwong): Implement with something useful.
+void MemlogReceiverPipe::ReadUntilBlocking() {
+  ssize_t bytes_read = 0;
+  do {
+    bytes_read = base::UnixDomainSocket::RecvMsg(
+        fd_.get(), read_buffer_.get(), kReadBufferSize, dummy_for_receive_);
+    if (bytes_read > 0) {
+      receiver_task_runner_->PostTask(
+          FROM_HERE,
+          base::BindOnce(&MemlogStreamReceiver::OnStreamData, receiver_,
+                         std::move(read_buffer_), bytes_read));
+      read_buffer_.reset(new char[kReadBufferSize]);
+      return;
+    } else if (bytes_read == 0) {
+      // Other end closed the pipe.
+      if (receiver_) {
+        receiver_task_runner_->PostTask(
+            FROM_HERE,
+            base::BindOnce(&MemlogStreamReceiver::OnStreamComplete, receiver_));
+      }
+      return;
+    } else {
+      if (errno != EAGAIN && errno != EWOULDBLOCK) {
+        PLOG(ERROR) << "Problem reading socket.";
+      }
+    }
+  } while (bytes_read > 0);
 }
 
 int MemlogReceiverPipe::GetRemoteProcessID() {
-  // TODO(ajwong): Implement with something useful.
-  return 0;
+  return 1;  // TODO(ajwong): Record the originating process ID somehow.
 }
 
 void MemlogReceiverPipe::SetReceiver(
diff --git a/chrome/profiling/memlog_receiver_pipe_posix.h b/chrome/profiling/memlog_receiver_pipe_posix.h
index a5abb43..b9a2209a 100644
--- a/chrome/profiling/memlog_receiver_pipe_posix.h
+++ b/chrome/profiling/memlog_receiver_pipe_posix.h
@@ -7,6 +7,7 @@
 
 #include <string>
 
+#include "base/files/scoped_file.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/message_loop/message_loop.h"
@@ -23,28 +24,9 @@
 class MemlogReceiverPipe
     : public base::RefCountedThreadSafe<MemlogReceiverPipe> {
  public:
-  class CompletionThunk : public base::MessageLoopForIO::Watcher {
-   public:
-    using Callback = base::RepeatingCallback<void(int)>;
+  explicit MemlogReceiverPipe(base::ScopedFD fd);
 
-    CompletionThunk(int fd, Callback cb);
-    ~CompletionThunk() override;
-
-    void set_callback(Callback cb) { callback_ = cb; }
-
-    void OnFileCanReadWithoutBlocking(int fd) override;
-    void OnFileCanWriteWithoutBlocking(int fd) override;
-
-   private:
-    base::MessageLoopForIO::FileDescriptorWatcher controller_;
-
-    int fd_;
-    Callback callback_;
-  };
-
-  explicit MemlogReceiverPipe(std::unique_ptr<CompletionThunk> thunk);
-
-  void StartReadingOnIOThread();
+  void ReadUntilBlocking();
 
   int GetRemoteProcessID();
   void SetReceiver(scoped_refptr<base::TaskRunner> task_runner,
@@ -54,11 +36,15 @@
   friend class base::RefCountedThreadSafe<MemlogReceiverPipe>;
   ~MemlogReceiverPipe();
 
-  std::unique_ptr<CompletionThunk> thunk_;
+  base::ScopedFD fd_;
+  std::unique_ptr<char[]> read_buffer_;
 
   scoped_refptr<base::TaskRunner> receiver_task_runner_;
   scoped_refptr<MemlogStreamReceiver> receiver_;
 
+  // Make base::UnixDomainSocket::RecvMsg happy.
+  std::vector<base::ScopedFD>* dummy_for_receive_;
+
   DISALLOW_COPY_AND_ASSIGN(MemlogReceiverPipe);
 };
 
diff --git a/chrome/profiling/memlog_receiver_pipe_server_posix.cc b/chrome/profiling/memlog_receiver_pipe_server_posix.cc
index 86540d1..e94e37a 100644
--- a/chrome/profiling/memlog_receiver_pipe_server_posix.cc
+++ b/chrome/profiling/memlog_receiver_pipe_server_posix.cc
@@ -7,21 +7,62 @@
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
-#include "base/strings/utf_string_conversions.h"
+#include "base/strings/string_number_conversions.h"
 #include "chrome/common/profiling/memlog_stream.h"
 
 namespace profiling {
 
 MemlogReceiverPipeServer::MemlogReceiverPipeServer(
     base::TaskRunner* io_runner,
-    const std::string& pipe_id,
+    const std::string& first_pipe_id,
     NewConnectionCallback on_new_conn)
-    : io_runner_(io_runner),
-      pipe_id_(pipe_id),
-      on_new_connection_(on_new_conn) {}
+    : io_runner_(io_runner), on_new_connection_(on_new_conn) {
+  int fd;
+  CHECK(base::StringToInt(first_pipe_id, &fd));
+  first_pipe_.reset(fd);
+}
 
 MemlogReceiverPipeServer::~MemlogReceiverPipeServer() {}
 
-void MemlogReceiverPipeServer::Start() {}
+void MemlogReceiverPipeServer::Start() {
+  // Create Mojo Message Pipe here.
+  io_runner_->PostTask(FROM_HERE,
+                       base::Bind(&MemlogReceiverPipeServer::StartOnIO, this));
+  // TODO(ajwong): Add mojo service here.
+}
+
+void MemlogReceiverPipeServer::StartOnIO() {
+  scoped_refptr<MemlogReceiverPipe> pipe(
+      pipe_poller_.CreatePipe(std::move(first_pipe_)));
+  on_new_connection_.Run(pipe);
+  pipe->ReadUntilBlocking();
+}
+
+MemlogReceiverPipeServer::PipePoller::PipePoller() : controller_(FROM_HERE) {}
+
+MemlogReceiverPipeServer::PipePoller::~PipePoller() {}
+
+scoped_refptr<MemlogReceiverPipe>
+MemlogReceiverPipeServer::PipePoller::CreatePipe(base::ScopedFD fd) {
+  int raw_fd = fd.get();
+  scoped_refptr<MemlogReceiverPipe> pipe(new MemlogReceiverPipe(std::move(fd)));
+  pipes_[raw_fd] = pipe;
+  base::MessageLoopForIO::current()->WatchFileDescriptor(
+      raw_fd, true, base::MessageLoopForIO::WATCH_READ, &controller_, this);
+  return pipe;
+}
+
+void MemlogReceiverPipeServer::PipePoller::OnFileCanReadWithoutBlocking(
+    int fd) {
+  const auto& it = pipes_.find(fd);
+  if (it != pipes_.end()) {
+    it->second->ReadUntilBlocking();
+  }
+}
+
+void MemlogReceiverPipeServer::PipePoller::OnFileCanWriteWithoutBlocking(
+    int fd) {
+  NOTIMPLEMENTED();
+}
 
 }  // namespace profiling
diff --git a/chrome/profiling/memlog_receiver_pipe_server_posix.h b/chrome/profiling/memlog_receiver_pipe_server_posix.h
index 8cc511a..2c7a316 100644
--- a/chrome/profiling/memlog_receiver_pipe_server_posix.h
+++ b/chrome/profiling/memlog_receiver_pipe_server_posix.h
@@ -8,6 +8,8 @@
 #include <memory>
 
 #include "base/callback_forward.h"
+#include "base/containers/flat_map.h"
+#include "base/files/scoped_file.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/message_loop/message_pump_libevent.h"
@@ -46,9 +48,28 @@
   friend class base::RefCountedThreadSafe<MemlogReceiverPipeServer>;
   ~MemlogReceiverPipeServer();
 
+  void StartOnIO();
+
+  class PipePoller : public base::MessageLoopForIO::Watcher {
+   public:
+    PipePoller();
+    ~PipePoller() override;
+
+    scoped_refptr<MemlogReceiverPipe> CreatePipe(base::ScopedFD fd);
+
+    void OnFileCanReadWithoutBlocking(int fd) override;
+    void OnFileCanWriteWithoutBlocking(int fd) override;
+
+   private:
+    base::MessageLoopForIO::FileDescriptorWatcher controller_;
+
+    base::flat_map<int, scoped_refptr<MemlogReceiverPipe>> pipes_;
+  };
+
   scoped_refptr<base::TaskRunner> io_runner_;
-  std::string pipe_id_;
+  base::ScopedFD first_pipe_;
   NewConnectionCallback on_new_connection_;
+  PipePoller pipe_poller_;
 
   DISALLOW_COPY_AND_ASSIGN(MemlogReceiverPipeServer);
 };
diff --git a/chrome/profiling/memlog_receiver_pipe_server_win.cc b/chrome/profiling/memlog_receiver_pipe_server_win.cc
index cf426f4..780b873 100644
--- a/chrome/profiling/memlog_receiver_pipe_server_win.cc
+++ b/chrome/profiling/memlog_receiver_pipe_server_win.cc
@@ -76,6 +76,7 @@
       new MemlogReceiverPipe(std::move(current_)));
   ScheduleNewConnection(false);
 
+  // TODO(ajwong): Why should there be a null-check here?
   if (!on_new_connection_.is_null())
     on_new_connection_.Run(pipe);
   pipe->StartReadingOnIOThread();
diff --git a/chrome/profiling/memlog_stream_parser.h b/chrome/profiling/memlog_stream_parser.h
index dd462d9..1418d0b 100644
--- a/chrome/profiling/memlog_stream_parser.h
+++ b/chrome/profiling/memlog_stream_parser.h
@@ -38,7 +38,7 @@
     READ_NO_DATA  // Not enough data, try again when we get more
   };
 
-  ~MemlogStreamParser();
+  ~MemlogStreamParser() override;
 
   // Returns true if the given number of bytes are available now.
   bool AreBytesAvailable(size_t count) const;
diff --git a/chrome/profiling/memlog_stream_receiver.h b/chrome/profiling/memlog_stream_receiver.h
index 8a0c9b1..75c32aa 100644
--- a/chrome/profiling/memlog_stream_receiver.h
+++ b/chrome/profiling/memlog_stream_receiver.h
@@ -27,7 +27,7 @@
 
  protected:
   friend class base::RefCountedThreadSafe<MemlogStreamReceiver>;
-  ~MemlogStreamReceiver() {}
+  virtual ~MemlogStreamReceiver() {}
 };
 
 }  // namespace profiling
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index 98c32a2..c6f47b0a 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -86,6 +86,7 @@
 #include "components/subresource_filter/content/renderer/subresource_filter_agent.h"
 #include "components/subresource_filter/content/renderer/unverified_ruleset_dealer.h"
 #include "components/task_scheduler_util/renderer/initialization.h"
+#include "components/variations/variations_switches.h"
 #include "components/version_info/version_info.h"
 #include "components/visitedlink/renderer/visitedlink_slave.h"
 #include "components/web_cache/renderer/web_cache_impl.h"
@@ -444,7 +445,7 @@
   thread->RegisterExtension(extensions_v8::LoadTimesExtension::Get());
 
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
-  if (command_line->HasSwitch(switches::kEnableBenchmarking))
+  if (command_line->HasSwitch(variations::switches::kEnableBenchmarking))
     thread->RegisterExtension(extensions_v8::BenchmarkingExtension::Get());
   if (command_line->HasSwitch(switches::kEnableNetBenchmarking))
     thread->RegisterExtension(extensions_v8::NetBenchmarkingExtension::Get());
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 136edb3..dec3005 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -3201,6 +3201,8 @@
     "../browser/page_load_metrics/observers/tab_restore_page_load_metrics_observer_unittest.cc",
     "../browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc",
     "../browser/page_load_metrics/page_load_metrics_util_unittest.cc",
+    "../browser/page_load_metrics/test/ukm_tester.cc",
+    "../browser/page_load_metrics/test/ukm_tester.h",
     "../browser/page_load_metrics/user_input_tracker_unittest.cc",
     "../browser/password_manager/chrome_password_manager_client_unittest.cc",
     "../browser/password_manager/password_manager_internals_service_unittest.cc",
diff --git a/chrome/test/data/webui/settings/category_default_setting_tests.js b/chrome/test/data/webui/settings/category_default_setting_tests.js
index 6c2007f..081221f 100644
--- a/chrome/test/data/webui/settings/category_default_setting_tests.js
+++ b/chrome/test/data/webui/settings/category_default_setting_tests.js
@@ -110,8 +110,8 @@
         .then(function(args) {
           assertEquals(settings.ContentSettingsTypes.GEOLOCATION, args[0]);
           assertEquals(
-              enabled ? settings.PermissionValues.BLOCK :
-                        settings.PermissionValues.ASK,
+              enabled ? settings.ContentSetting.BLOCK :
+                        settings.ContentSetting.ASK,
               args[1]);
           assertNotEquals(enabled, testElement.categoryEnabled);
         });
@@ -152,7 +152,7 @@
           Polymer.dom.flush();
 
           assertEquals(category, args[0]);
-          assertEquals(settings.PermissionValues.BLOCK, args[1]);
+          assertEquals(settings.ContentSetting.BLOCK, args[1]);
           assertFalse(testElement.categoryEnabled);
           assertTrue(secondaryToggle.disabled);
           assertTrue(secondaryToggle.checked);
@@ -180,7 +180,7 @@
           Polymer.dom.flush();
 
           assertEquals(category, args[0]);
-          assertEquals(settings.PermissionValues.ALLOW, args[1]);
+          assertEquals(settings.ContentSetting.ALLOW, args[1]);
           assertTrue(testElement.categoryEnabled);
           assertFalse(secondaryToggle.disabled);
           assertFalse(secondaryToggle.checked);
@@ -194,7 +194,7 @@
           Polymer.dom.flush();
 
           assertEquals(category, args[0]);
-          assertEquals(settings.PermissionValues.BLOCK, args[1]);
+          assertEquals(settings.ContentSetting.BLOCK, args[1]);
           assertFalse(testElement.categoryEnabled);
           assertTrue(secondaryToggle.disabled);
           assertFalse(secondaryToggle.checked);
@@ -208,7 +208,7 @@
           Polymer.dom.flush();
 
           assertEquals(category, args[0]);
-          assertEquals(settings.PermissionValues.ALLOW, args[1]);
+          assertEquals(settings.ContentSetting.ALLOW, args[1]);
           assertTrue(testElement.categoryEnabled);
           assertFalse(secondaryToggle.disabled);
           assertFalse(secondaryToggle.checked);
@@ -232,12 +232,12 @@
   test('test special tri-state Flash category', function() {
     return testTristateCategory(
         prefsFlashDetect, settings.ContentSettingsTypes.PLUGINS,
-        settings.PermissionValues.IMPORTANT_CONTENT, '#subOptionToggle');
+        settings.ContentSetting.IMPORTANT_CONTENT, '#subOptionToggle');
   });
 
   test('test special tri-state Cookies category', function() {
     return testTristateCategory(
         prefsCookesSessionOnly, settings.ContentSettingsTypes.COOKIES,
-        settings.PermissionValues.SESSION_ONLY, '#subOptionToggle');
+        settings.ContentSetting.SESSION_ONLY, '#subOptionToggle');
   });
 });
diff --git a/chrome/test/data/webui/settings/settings_passwords_section_browsertest.js b/chrome/test/data/webui/settings/settings_passwords_section_browsertest.js
index 6cd0403..21de179 100644
--- a/chrome/test/data/webui/settings/settings_passwords_section_browsertest.js
+++ b/chrome/test/data/webui/settings/settings_passwords_section_browsertest.js
@@ -64,8 +64,9 @@
           node.$$('#originUrl').textContent.trim());
       assertEquals(passwordInfo.loginPair.urls.link,
           node.$$('#originUrl').href);
-      assertEquals(passwordInfo.loginPair.username,
-          node.$$('#username').textContent);
+      assertEquals(
+          passwordInfo.loginPair.username,
+          node.$$('#username').textContent.trim());
       assertEquals(passwordInfo.numCharactersInPassword,
           node.$$('#password').value.length);
     }
@@ -84,8 +85,9 @@
     for (var index = 0; index < exceptionList.length; ++index) {
       var node = nodes[index];
       var exception = exceptionList[index];
-      assertEquals(exception.urls.shown,
-          node.querySelector('#exception').textContent);
+      assertEquals(
+          exception.urls.shown,
+          node.querySelector('#exception').textContent.trim());
       assertEquals(exception.urls.link, node.querySelector('#exception').href);
     }
   }
diff --git a/chrome/test/data/webui/settings/site_details_permission_tests.js b/chrome/test/data/webui/settings/site_details_permission_tests.js
index 51bd52e7..f8d73ef 100644
--- a/chrome/test/data/webui/settings/site_details_permission_tests.js
+++ b/chrome/test/data/webui/settings/site_details_permission_tests.js
@@ -66,11 +66,11 @@
     return false;
   };
 
-  function validatePermissionFlipWorks(origin, expectedPermissionValue) {
+  function validatePermissionFlipWorks(origin, expectedContentSetting) {
     browserProxy.resetResolver('setCategoryPermissionForOrigin');
 
     // Simulate permission change initiated by the user.
-    testElement.$.permission.value = expectedPermissionValue;
+    testElement.$.permission.value = expectedContentSetting;
     testElement.$.permission.dispatchEvent(new CustomEvent('change'));
 
     return browserProxy.whenCalled('setCategoryPermissionForOrigin')
@@ -78,7 +78,7 @@
           assertEquals(origin, args[0]);
           assertEquals('', args[1]);
           assertEquals(testElement.category, args[2]);
-          assertEquals(expectedPermissionValue, args[3]);
+          assertEquals(expectedContentSetting, args[3]);
         });
   };
 
@@ -100,14 +100,14 @@
         'Widget should be labelled correctly');
 
     // Flip the permission and validate that prefs stay in sync.
-    return validatePermissionFlipWorks(origin, settings.PermissionValues.ALLOW)
+    return validatePermissionFlipWorks(origin, settings.ContentSetting.ALLOW)
         .then(function() {
           return validatePermissionFlipWorks(
-              origin, settings.PermissionValues.BLOCK);
+              origin, settings.ContentSetting.BLOCK);
         })
         .then(function() {
           return validatePermissionFlipWorks(
-              origin, settings.PermissionValues.ALLOW);
+              origin, settings.ContentSetting.ALLOW);
         });
   });
 
@@ -130,14 +130,14 @@
 
     // Flip the permission and validate that prefs stay in sync.
     return validatePermissionFlipWorks(
-               origin, settings.PermissionValues.SESSION_ONLY)
+               origin, settings.ContentSetting.SESSION_ONLY)
         .then(function() {
           return validatePermissionFlipWorks(
-              origin, settings.PermissionValues.ALLOW);
+              origin, settings.ContentSetting.ALLOW);
         })
         .then(function() {
           return validatePermissionFlipWorks(
-              origin, settings.PermissionValues.BLOCK);
+              origin, settings.ContentSetting.BLOCK);
         });
   });
 });
diff --git a/chrome/test/data/webui/settings/site_list_tests.js b/chrome/test/data/webui/settings/site_list_tests.js
index a7c5336..9b340576 100644
--- a/chrome/test/data/webui/settings/site_list_tests.js
+++ b/chrome/test/data/webui/settings/site_list_tests.js
@@ -420,7 +420,7 @@
   /**
    * Configures the test element for a particular category.
    * @param {settings.ContentSettingsTypes} category The category to set up.
-   * @param {settings.PermissionValues} subtype Type of list to use.
+   * @param {settings.ContentSetting} subtype Type of list to use.
    * @param {Array<dictionary>} prefs The prefs to use.
    */
   function setUpCategory(category, subtype, prefs) {
@@ -438,7 +438,7 @@
   test('read-only attribute', function() {
     setUpCategory(
         settings.ContentSettingsTypes.GEOLOCATION,
-        settings.PermissionValues.ALLOW, prefsVarious);
+        settings.ContentSetting.ALLOW, prefsVarious);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(contentType) {
           // Flush to be sure list container is populated.
@@ -458,7 +458,7 @@
   test('getExceptionList API used', function() {
     setUpCategory(
         settings.ContentSettingsTypes.GEOLOCATION,
-        settings.PermissionValues.ALLOW, prefsEmpty);
+        settings.ContentSetting.ALLOW, prefsEmpty);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(contentType) {
           assertEquals(settings.ContentSettingsTypes.GEOLOCATION, contentType);
@@ -468,7 +468,7 @@
   test('Empty list', function() {
     setUpCategory(
         settings.ContentSettingsTypes.GEOLOCATION,
-        settings.PermissionValues.ALLOW, prefsEmpty);
+        settings.ContentSetting.ALLOW, prefsEmpty);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(contentType) {
           assertEquals(settings.ContentSettingsTypes.GEOLOCATION, contentType);
@@ -476,7 +476,7 @@
           assertEquals(0, testElement.sites.length);
 
           assertEquals(
-              settings.PermissionValues.ALLOW, testElement.categorySubtype);
+              settings.ContentSetting.ALLOW, testElement.categorySubtype);
 
           assertFalse(testElement.$.category.hidden);
         });
@@ -485,7 +485,7 @@
   test('initial ALLOW state is correct', function() {
     setUpCategory(
         settings.ContentSettingsTypes.GEOLOCATION,
-        settings.PermissionValues.ALLOW, prefsGeolocation);
+        settings.ContentSetting.ALLOW, prefsGeolocation);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(contentType) {
           assertEquals(settings.ContentSettingsTypes.GEOLOCATION, contentType);
@@ -498,7 +498,7 @@
               prefsGeolocation.exceptions.geolocation[1].origin,
               testElement.sites[1].origin);
           assertEquals(
-              settings.PermissionValues.ALLOW, testElement.categorySubtype);
+              settings.ContentSetting.ALLOW, testElement.categorySubtype);
           Polymer.dom.flush();  // Populates action menu.
           openActionMenu(0);
           assertMenu(['Block', 'Edit', 'Remove'], testElement);
@@ -510,7 +510,7 @@
   test('action menu closes when list changes', function() {
     setUpCategory(
         settings.ContentSettingsTypes.GEOLOCATION,
-        settings.PermissionValues.ALLOW, prefsGeolocation);
+        settings.ContentSetting.ALLOW, prefsGeolocation);
     var actionMenu = testElement.$$('dialog[is=cr-action-menu]');
     return browserProxy.whenCalled('getExceptionList')
         .then(function(contentType) {
@@ -534,7 +534,7 @@
   test('exceptions are not reordered in non-ALL_SITES', function() {
     setUpCategory(
         settings.ContentSettingsTypes.GEOLOCATION,
-        settings.PermissionValues.BLOCK, prefsMixedProvider);
+        settings.ContentSetting.BLOCK, prefsMixedProvider);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(contentType) {
           assertEquals(settings.ContentSettingsTypes.GEOLOCATION, contentType);
@@ -554,7 +554,7 @@
 
   test('initial BLOCK state is correct', function() {
     var contentType = settings.ContentSettingsTypes.GEOLOCATION;
-    var categorySubtype = settings.PermissionValues.BLOCK;
+    var categorySubtype = settings.ContentSetting.BLOCK;
     setUpCategory(contentType, categorySubtype, prefsGeolocation);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(actualContentType) {
@@ -578,7 +578,7 @@
 
   test('initial SESSION ONLY state is correct', function() {
     var contentType = settings.ContentSettingsTypes.COOKIES;
-    var categorySubtype = settings.PermissionValues.SESSION_ONLY;
+    var categorySubtype = settings.ContentSetting.SESSION_ONLY;
     setUpCategory(contentType, categorySubtype, prefsSessionOnly);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(actualContentType) {
@@ -600,7 +600,7 @@
 
   test('update lists for incognito', function() {
     var contentType = settings.ContentSettingsTypes.PLUGINS;
-    var categorySubtype = settings.PermissionValues.BLOCK;
+    var categorySubtype = settings.ContentSetting.BLOCK;
     setUpCategory(contentType, categorySubtype, prefsControlled);
     var list = testElement.$.listContainer;
     return browserProxy.whenCalled('getExceptionList')
@@ -637,7 +637,7 @@
 
   test('initial INCOGNITO BLOCK state is correct', function() {
     var contentType = settings.ContentSettingsTypes.COOKIES;
-    var categorySubtype = settings.PermissionValues.BLOCK;
+    var categorySubtype = settings.ContentSetting.BLOCK;
     setUpCategory(contentType, categorySubtype, prefsIncognito);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(actualContentType) {
@@ -670,7 +670,7 @@
 
   test('initial INCOGNITO ALLOW state is correct', function() {
     var contentType = settings.ContentSettingsTypes.COOKIES;
-    var categorySubtype = settings.PermissionValues.ALLOW;
+    var categorySubtype = settings.ContentSetting.ALLOW;
     setUpCategory(contentType, categorySubtype, prefsIncognito);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(actualContentType) {
@@ -711,7 +711,7 @@
     Polymer.dom.flush();
 
     var contentType = settings.ContentSettingsTypes.GEOLOCATION;
-    var categorySubtype = settings.PermissionValues.ALLOW;
+    var categorySubtype = settings.ContentSetting.ALLOW;
     setUpCategory(contentType, categorySubtype, prefsOneEnabled);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(actualContentType) {
@@ -750,7 +750,7 @@
   test('edit action menu opens edit exception dialog', function() {
     setUpCategory(
         settings.ContentSettingsTypes.COOKIES,
-        settings.PermissionValues.SESSION_ONLY, prefsSessionOnly);
+        settings.ContentSetting.SESSION_ONLY, prefsSessionOnly);
 
     return browserProxy.whenCalled('getExceptionList').then(function() {
       Polymer.dom.flush();  // Populates action menu.
@@ -771,8 +771,7 @@
 
   test('list items shown and clickable when data is present', function() {
     var contentType = settings.ContentSettingsTypes.GEOLOCATION;
-    setUpCategory(
-        contentType, settings.PermissionValues.ALLOW, prefsGeolocation);
+    setUpCategory(contentType, settings.ContentSetting.ALLOW, prefsGeolocation);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(actualContentType) {
           assertEquals(contentType, actualContentType);
@@ -804,8 +803,7 @@
   test('Block list open when Allow list is empty', function() {
     // Prefs: One item in Block list, nothing in Allow list.
     var contentType = settings.ContentSettingsTypes.GEOLOCATION;
-    setUpCategory(
-        contentType, settings.PermissionValues.BLOCK, prefsOneDisabled);
+    setUpCategory(contentType, settings.ContentSetting.BLOCK, prefsOneDisabled);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(actualContentType) {
           assertEquals(contentType, actualContentType);
@@ -819,8 +817,7 @@
   test('Block list closed when Allow list is not empty', function() {
     // Prefs: Items in both Block and Allow list.
     var contentType = settings.ContentSettingsTypes.GEOLOCATION;
-    setUpCategory(
-        contentType, settings.PermissionValues.BLOCK, prefsGeolocation);
+    setUpCategory(contentType, settings.ContentSetting.BLOCK, prefsGeolocation);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(actualContentType) {
           assertEquals(contentType, actualContentType);
@@ -832,8 +829,7 @@
   test('Allow list is always open (Block list empty)', function() {
     // Prefs: One item in Allow list, nothing in Block list.
     var contentType = settings.ContentSettingsTypes.GEOLOCATION;
-    setUpCategory(
-        contentType, settings.PermissionValues.ALLOW, prefsOneEnabled);
+    setUpCategory(contentType, settings.ContentSetting.ALLOW, prefsOneEnabled);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(actualContentType) {
           assertEquals(contentType, actualContentType);
@@ -847,8 +843,7 @@
   test('Allow list is always open (Block list non-empty)', function() {
     // Prefs: Items in both Block and Allow list.
     var contentType = settings.ContentSettingsTypes.GEOLOCATION;
-    setUpCategory(
-        contentType, settings.PermissionValues.ALLOW, prefsGeolocation);
+    setUpCategory(contentType, settings.ContentSetting.ALLOW, prefsGeolocation);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(actualContentType) {
           assertEquals(contentType, actualContentType);
@@ -862,8 +857,7 @@
   test('Block list not hidden when empty', function() {
     // Prefs: One item in Allow list, nothing in Block list.
     var contentType = settings.ContentSettingsTypes.GEOLOCATION;
-    setUpCategory(
-        contentType, settings.PermissionValues.BLOCK, prefsOneEnabled);
+    setUpCategory(contentType, settings.ContentSetting.BLOCK, prefsOneEnabled);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(actualContentType) {
           assertEquals(contentType, actualContentType);
@@ -874,8 +868,7 @@
   test('Allow list not hidden when empty', function() {
     // Prefs: One item in Block list, nothing in Allow list.
     var contentType = settings.ContentSettingsTypes.GEOLOCATION;
-    setUpCategory(
-        contentType, settings.PermissionValues.ALLOW, prefsOneDisabled);
+    setUpCategory(contentType, settings.ContentSetting.ALLOW, prefsOneDisabled);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(actualContentType) {
           assertEquals(contentType, actualContentType);
@@ -885,7 +878,7 @@
 
   test('Mixed embeddingOrigin', function() {
     setUpCategory(
-        settings.ContentSettingsTypes.IMAGES, settings.PermissionValues.ALLOW,
+        settings.ContentSettingsTypes.IMAGES, settings.ContentSetting.ALLOW,
         prefsMixedEmbeddingOrigin);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(contentType) {
@@ -906,7 +899,7 @@
     // Prefs: One item with scheme and one without.
     setUpCategory(
         settings.ContentSettingsTypes.GEOLOCATION,
-        settings.PermissionValues.ALLOW, prefsMixedSchemes);
+        settings.ContentSetting.ALLOW, prefsMixedSchemes);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(contentType) {
           // No further checks needed. If this fails, it will hang the test.
@@ -917,7 +910,7 @@
     // Test for error: "Cannot read property 'origin' of undefined".
     setUpCategory(
         settings.ContentSettingsTypes.GEOLOCATION,
-        settings.PermissionValues.ALLOW, prefsGeolocation);
+        settings.ContentSetting.ALLOW, prefsGeolocation);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(contentType) {
           Polymer.dom.flush();
@@ -931,8 +924,8 @@
 
   test('Chrome Extension scheme', function() {
     setUpCategory(
-        settings.ContentSettingsTypes.JAVASCRIPT,
-        settings.PermissionValues.BLOCK, prefsChromeExtension);
+        settings.ContentSettingsTypes.JAVASCRIPT, settings.ContentSetting.BLOCK,
+        prefsChromeExtension);
     return browserProxy.whenCalled('getExceptionList')
         .then(function(contentType) {
           Polymer.dom.flush();
@@ -1056,7 +1049,7 @@
     PolymerTest.clearBody();
     dialog = document.createElement('add-site-dialog');
     dialog.category = settings.ContentSettingsTypes.GEOLOCATION;
-    dialog.contentSetting = settings.PermissionValues.ALLOW;
+    dialog.contentSetting = settings.ContentSetting.ALLOW;
     document.body.appendChild(dialog);
     dialog.open();
   });
diff --git a/chrome/test/data/webui/settings/site_settings_page_browsertest.js b/chrome/test/data/webui/settings/site_settings_page_browsertest.js
index fc4929e..89274a9 100644
--- a/chrome/test/data/webui/settings/site_settings_page_browsertest.js
+++ b/chrome/test/data/webui/settings/site_settings_page_browsertest.js
@@ -30,22 +30,35 @@
     });
 
     test('defaultSettingLabel_ tests', function() {
-      assertEquals('a', ui.defaultSettingLabel_(
-          settings.PermissionValues.ALLOW, 'a', 'b'));
-      assertEquals('b', ui.defaultSettingLabel_(
-          settings.PermissionValues.BLOCK, 'a', 'b'));
-      assertEquals('a', ui.defaultSettingLabel_(
-          settings.PermissionValues.ALLOW, 'a', 'b', 'c'));
-      assertEquals('b', ui.defaultSettingLabel_(
-          settings.PermissionValues.BLOCK, 'a', 'b', 'c'));
-      assertEquals('c', ui.defaultSettingLabel_(
-          settings.PermissionValues.SESSION_ONLY, 'a', 'b', 'c'));
-      assertEquals('c', ui.defaultSettingLabel_(
-          settings.PermissionValues.DEFAULT, 'a', 'b', 'c'));
-      assertEquals('c', ui.defaultSettingLabel_(
-          settings.PermissionValues.ASK, 'a', 'b', 'c'));
-      assertEquals('c', ui.defaultSettingLabel_(
-          settings.PermissionValues.DETECT_IMPORTANT_CONTENT, 'a', 'b', 'c'));
+      assertEquals(
+          'a',
+          ui.defaultSettingLabel_(settings.ContentSetting.ALLOW, 'a', 'b'));
+      assertEquals(
+          'b',
+          ui.defaultSettingLabel_(settings.ContentSetting.BLOCK, 'a', 'b'));
+      assertEquals(
+          'a',
+          ui.defaultSettingLabel_(
+              settings.ContentSetting.ALLOW, 'a', 'b', 'c'));
+      assertEquals(
+          'b',
+          ui.defaultSettingLabel_(
+              settings.ContentSetting.BLOCK, 'a', 'b', 'c'));
+      assertEquals(
+          'c',
+          ui.defaultSettingLabel_(
+              settings.ContentSetting.SESSION_ONLY, 'a', 'b', 'c'));
+      assertEquals(
+          'c',
+          ui.defaultSettingLabel_(
+              settings.ContentSetting.DEFAULT, 'a', 'b', 'c'));
+      assertEquals(
+          'c',
+          ui.defaultSettingLabel_(settings.ContentSetting.ASK, 'a', 'b', 'c'));
+      assertEquals(
+          'c',
+          ui.defaultSettingLabel_(
+              settings.ContentSetting.DETECT_IMPORTANT_CONTENT, 'a', 'b', 'c'));
     });
   });
 
diff --git a/chromecast/base/bind_to_task_runner.h b/chromecast/base/bind_to_task_runner.h
index d17b4d10..a982a1c 100644
--- a/chromecast/base/bind_to_task_runner.h
+++ b/chromecast/base/bind_to_task_runner.h
@@ -13,7 +13,6 @@
 #include "base/callback.h"
 #include "base/location.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_vector.h"
 #include "base/task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
 
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
index 876250f..45983232 100644
--- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
+++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
@@ -11,7 +11,6 @@
 #include <utility>
 
 #include "base/memory/ptr_util.h"
-#include "base/memory/scoped_vector.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
diff --git a/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc b/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc
index db5c2f50..b252c36 100644
--- a/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc
+++ b/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc
@@ -16,7 +16,6 @@
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_vector.h"
 #include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
diff --git a/chromecast/media/cma/base/multi_demuxer_stream_adapter_unittest.cc b/chromecast/media/cma/base/multi_demuxer_stream_adapter_unittest.cc
index 3b7ade2..971d26fe 100644
--- a/chromecast/media/cma/base/multi_demuxer_stream_adapter_unittest.cc
+++ b/chromecast/media/cma/base/multi_demuxer_stream_adapter_unittest.cc
@@ -3,12 +3,12 @@
 // found in the LICENSE file.
 
 #include <memory>
+#include <vector>
 
 #include "base/bind.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_vector.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
@@ -58,9 +58,9 @@
   // List of expected frame indices with decoder config changes.
   std::list<int> config_idx_;
 
-  ScopedVector<DemuxerStreamForTest> demuxer_streams_;
+  std::vector<std::unique_ptr<DemuxerStreamForTest>> demuxer_streams_;
 
-  ScopedVector<CodedFrameProvider> coded_frame_providers_;
+  std::vector<std::unique_ptr<CodedFrameProvider>> coded_frame_providers_;
 
  private:
   // exit if all of the streams end
@@ -92,22 +92,22 @@
   coded_frame_providers_.clear();
   frame_received_count_ = 0;
 
-  for (auto* stream : demuxer_streams_) {
+  for (const auto& stream : demuxer_streams_) {
     coded_frame_providers_.push_back(base::MakeUnique<DemuxerStreamAdapter>(
         base::ThreadTaskRunnerHandle::Get(), media_task_runner_factory_,
-        stream));
+        stream.get()));
   }
   running_stream_count_ = coded_frame_providers_.size();
 
   // read each stream
-  for (auto* code_frame_provider : coded_frame_providers_) {
-    auto read_cb = base::Bind(&MultiDemuxerStreamAdaptersTest::OnNewFrame,
-                              base::Unretained(this),
-                              code_frame_provider);
+  for (const auto& code_frame_provider : coded_frame_providers_) {
+    auto read_cb =
+        base::Bind(&MultiDemuxerStreamAdaptersTest::OnNewFrame,
+                   base::Unretained(this), code_frame_provider.get());
 
-    base::Closure task = base::Bind(&CodedFrameProvider::Read,
-                                    base::Unretained(code_frame_provider),
-                                    read_cb);
+    base::Closure task =
+        base::Bind(&CodedFrameProvider::Read,
+                   base::Unretained(code_frame_provider.get()), read_cb);
 
     base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task);
   }
@@ -154,10 +154,10 @@
       frame_count_short +
       kMaxPtsDiffMs / DemuxerStreamForTest::kDemuxerStreamForTestFrameDuration +
       100;
-  demuxer_streams_.push_back(std::unique_ptr<DemuxerStreamForTest>(
-      new DemuxerStreamForTest(frame_count_short, 2, 0, config_idx_)));
-  demuxer_streams_.push_back(std::unique_ptr<DemuxerStreamForTest>(
-      new DemuxerStreamForTest(frame_count_long, 10, 0, config_idx_)));
+  demuxer_streams_.push_back(base::MakeUnique<DemuxerStreamForTest>(
+      frame_count_short, 2, 0, config_idx_));
+  demuxer_streams_.push_back(base::MakeUnique<DemuxerStreamForTest>(
+      frame_count_long, 10, 0, config_idx_));
 
   total_expected_frames_ = frame_count_short + frame_count_long;
 
diff --git a/components/arc/arc_service_manager.cc b/components/arc/arc_service_manager.cc
index d3f90eb4..a0b2b96 100644
--- a/components/arc/arc_service_manager.cc
+++ b/components/arc/arc_service_manager.cc
@@ -6,7 +6,6 @@
 
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
-#include "base/task_runner.h"
 #include "components/arc/arc_bridge_service.h"
 #include "components/arc/arc_session.h"
 #include "components/arc/arc_session_runner.h"
@@ -20,10 +19,8 @@
 
 }  // namespace
 
-ArcServiceManager::ArcServiceManager(
-    scoped_refptr<base::TaskRunner> blocking_task_runner)
-    : blocking_task_runner_(blocking_task_runner),
-      arc_bridge_service_(base::MakeUnique<ArcBridgeService>()),
+ArcServiceManager::ArcServiceManager()
+    : arc_bridge_service_(base::MakeUnique<ArcBridgeService>()),
       activity_resolver_(new LocalActivityResolver()) {
   DCHECK(!g_arc_service_manager);
   g_arc_service_manager = this;
diff --git a/components/arc/arc_service_manager.h b/components/arc/arc_service_manager.h
index 0540a6b7..bd75a2d9 100644
--- a/components/arc/arc_service_manager.h
+++ b/components/arc/arc_service_manager.h
@@ -14,7 +14,6 @@
 
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "components/arc/arc_service.h"
 #include "components/arc/intent_helper/local_activity_resolver.h"
@@ -61,8 +60,7 @@
 // instance via the ArcBridgeService.
 class ArcServiceManager {
  public:
-  explicit ArcServiceManager(
-      scoped_refptr<base::TaskRunner> blocking_task_runner);
+  ArcServiceManager();
   ~ArcServiceManager();
 
   // |arc_bridge_service| can only be accessed on the thread that this
@@ -102,10 +100,6 @@
   // Called to shut down all ARC services.
   void Shutdown();
 
-  scoped_refptr<base::TaskRunner> blocking_task_runner() const {
-    return blocking_task_runner_;
-  }
-
   // Returns the activity resolver owned by ArcServiceManager.
   scoped_refptr<LocalActivityResolver> activity_resolver() {
     return activity_resolver_;
@@ -120,7 +114,6 @@
   ArcService* GetNamedServiceInternal(const std::string& name);
 
   THREAD_CHECKER(thread_checker_);
-  scoped_refptr<base::TaskRunner> blocking_task_runner_;
 
   std::unique_ptr<ArcBridgeService> arc_bridge_service_;
   std::unordered_multimap<std::string, std::unique_ptr<ArcService>> services_;
diff --git a/components/arc/arc_service_manager_unittest.cc b/components/arc/arc_service_manager_unittest.cc
index 120d5ac..cd9f9dc 100644
--- a/components/arc/arc_service_manager_unittest.cc
+++ b/components/arc/arc_service_manager_unittest.cc
@@ -91,7 +91,7 @@
   bool named_service_alive = false;
 
   // ArcServiceManager is empty, GetService() should return nullptr.
-  auto manager = base::MakeUnique<ArcServiceManager>(nullptr);
+  auto manager = base::MakeUnique<ArcServiceManager>();
   EXPECT_EQ(nullptr, manager->GetService<NamedService>());
 
   EXPECT_TRUE(manager->AddService(base::MakeUnique<NamedService>(
@@ -110,7 +110,7 @@
   bool anonymous_service_alive = false;
   bool second_anonymous_service_alive = false;
 
-  auto manager = base::MakeUnique<ArcServiceManager>(nullptr);
+  auto manager = base::MakeUnique<ArcServiceManager>();
 
   EXPECT_TRUE(manager->AddService(base::MakeUnique<AnonymousService>(
       arc_bridge_service(), &anonymous_service_alive)));
@@ -131,7 +131,7 @@
   bool second_named_service_alive = false;
   bool different_named_service_alive = false;
 
-  auto manager = base::MakeUnique<ArcServiceManager>(nullptr);
+  auto manager = base::MakeUnique<ArcServiceManager>();
 
   auto named_service = base::MakeUnique<NamedService>(arc_bridge_service(),
                                                       &named_service_alive);
@@ -168,7 +168,7 @@
 TEST_F(ArcServiceManagerTest, EmptyNamedServices) {
   bool empty_named_service_alive = false;
 
-  auto manager = base::MakeUnique<ArcServiceManager>(nullptr);
+  auto manager = base::MakeUnique<ArcServiceManager>();
 
   EXPECT_TRUE(manager->AddService(base::MakeUnique<EmptyNamedService>(
       arc_bridge_service(), &empty_named_service_alive)));
@@ -187,7 +187,7 @@
 
   // Create a manager. This will automatically be registered as a global
   // instance.
-  auto manager = base::MakeUnique<ArcServiceManager>(nullptr);
+  auto manager = base::MakeUnique<ArcServiceManager>();
 
   // The getter should return nullptr when the manager doesn't know about the
   // NamedService instance.
diff --git a/components/arc/arc_session.cc b/components/arc/arc_session.cc
index 99a846bb..ac26d68 100644
--- a/components/arc/arc_session.cc
+++ b/components/arc/arc_session.cc
@@ -17,10 +17,10 @@
 #include "base/location.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
-#include "base/memory/ref_counted.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/sys_info.h"
-#include "base/task_runner_util.h"
+#include "base/task_scheduler/post_task.h"
+#include "base/task_scheduler/task_traits.h"
 #include "base/threading/thread_checker.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chromeos/chromeos_switches.h"
@@ -212,8 +212,7 @@
     STOPPED,
   };
 
-  ArcSessionImpl(ArcBridgeService* arc_bridge_service,
-                 const scoped_refptr<base::TaskRunner>& blocking_task_runner);
+  explicit ArcSessionImpl(ArcBridgeService* arc_bridge_service);
   ~ArcSessionImpl() override;
 
   // ArcSession overrides:
@@ -266,9 +265,6 @@
   // Owned by ArcServiceManager.
   ArcBridgeService* const arc_bridge_service_;
 
-  // Task runner to run a blocking tasks.
-  scoped_refptr<base::TaskRunner> blocking_task_runner_;
-
   // The state of the session.
   State state_ = State::NOT_STARTED;
 
@@ -301,12 +297,8 @@
   DISALLOW_COPY_AND_ASSIGN(ArcSessionImpl);
 };
 
-ArcSessionImpl::ArcSessionImpl(
-    ArcBridgeService* arc_bridge_service,
-    const scoped_refptr<base::TaskRunner>& blocking_task_runner)
-    : arc_bridge_service_(arc_bridge_service),
-      blocking_task_runner_(blocking_task_runner),
-      weak_factory_(this) {
+ArcSessionImpl::ArcSessionImpl(ArcBridgeService* arc_bridge_service)
+    : arc_bridge_service_(arc_bridge_service), weak_factory_(this) {
   chromeos::SessionManagerClient* client = GetSessionManagerClient();
   if (client == nullptr)
     return;
@@ -340,8 +332,8 @@
     VLOG(2) << "Starting ARC session";
     VLOG(2) << "Creating socket...";
     state_ = State::CREATING_SOCKET;
-    base::PostTaskAndReplyWithResult(
-        blocking_task_runner_.get(), FROM_HERE,
+    base::PostTaskWithTraitsAndReplyWithResult(
+        FROM_HERE, {base::MayBlock()},
         base::Bind(&ArcSessionImpl::CreateSocket),
         base::Bind(&ArcSessionImpl::OnSocketCreated, weak_factory_.GetWeakPtr(),
                    false /* not for login screen */));
@@ -526,8 +518,8 @@
     return;
   }
 
-  base::PostTaskAndReplyWithResult(
-      blocking_task_runner_.get(), FROM_HERE,
+  base::PostTaskWithTraitsAndReplyWithResult(
+      FROM_HERE, {base::MayBlock()},
       base::Bind(&ArcSessionImpl::ConnectMojo, base::Passed(&socket_fd),
                  base::Passed(&cancel_fd)),
       base::Bind(&ArcSessionImpl::OnMojoConnected, weak_factory_.GetWeakPtr()));
@@ -725,9 +717,8 @@
   VLOG(2) << "Creating socket...";
   login_screen_instance_requested_ = true;
   state_ = State::CREATING_SOCKET;
-  base::PostTaskAndReplyWithResult(
-      blocking_task_runner_.get(), FROM_HERE,
-      base::Bind(&ArcSessionImpl::CreateSocket),
+  base::PostTaskWithTraitsAndReplyWithResult(
+      FROM_HERE, {base::MayBlock()}, base::Bind(&ArcSessionImpl::CreateSocket),
       base::Bind(&ArcSessionImpl::OnSocketCreated, weak_factory_.GetWeakPtr(),
                  true /* for login screen */));
 }
@@ -789,10 +780,8 @@
 
 // static
 std::unique_ptr<ArcSession> ArcSession::Create(
-    ArcBridgeService* arc_bridge_service,
-    const scoped_refptr<base::TaskRunner>& blocking_task_runner) {
-  return base::MakeUnique<ArcSessionImpl>(arc_bridge_service,
-                                          blocking_task_runner);
+    ArcBridgeService* arc_bridge_service) {
+  return base::MakeUnique<ArcSessionImpl>(arc_bridge_service);
 }
 
 }  // namespace arc
diff --git a/components/arc/arc_session.h b/components/arc/arc_session.h
index 7ae7a19..01c8c939 100644
--- a/components/arc/arc_session.h
+++ b/components/arc/arc_session.h
@@ -9,7 +9,6 @@
 
 #include "base/macros.h"
 #include "base/observer_list.h"
-#include "base/task_runner.h"
 #include "components/arc/arc_bridge_service.h"
 #include "components/arc/arc_stop_reason.h"
 
@@ -40,8 +39,7 @@
 
   // Creates a default instance of ArcSession.
   static std::unique_ptr<ArcSession> Create(
-      ArcBridgeService* arc_bridge_service,
-      const scoped_refptr<base::TaskRunner>& blocking_task_runner);
+      ArcBridgeService* arc_bridge_service);
   virtual ~ArcSession();
 
   // Starts an instance for login screen. The instance is not a fully functional
diff --git a/components/arc/crash_collector/arc_crash_collector_bridge.cc b/components/arc/crash_collector/arc_crash_collector_bridge.cc
index 2ca3da4f..874f408 100644
--- a/components/arc/crash_collector/arc_crash_collector_bridge.cc
+++ b/components/arc/crash_collector/arc_crash_collector_bridge.cc
@@ -11,6 +11,8 @@
 
 #include "base/logging.h"
 #include "base/process/launch.h"
+#include "base/task_scheduler/post_task.h"
+#include "base/task_scheduler/task_traits.h"
 #include "components/arc/arc_bridge_service.h"
 #include "mojo/edk/embedder/embedder.h"
 
@@ -48,12 +50,8 @@
 
 namespace arc {
 
-ArcCrashCollectorBridge::ArcCrashCollectorBridge(
-    ArcBridgeService* bridge,
-    scoped_refptr<base::TaskRunner> blocking_task_runner)
-    : ArcService(bridge),
-      blocking_task_runner_(blocking_task_runner),
-      binding_(this) {
+ArcCrashCollectorBridge::ArcCrashCollectorBridge(ArcBridgeService* bridge)
+    : ArcService(bridge), binding_(this) {
   arc_bridge_service()->crash_collector()->AddObserver(this);
 }
 
@@ -75,9 +73,10 @@
   mojo::edk::ScopedPlatformHandle pipe_handle;
   mojo::edk::PassWrappedPlatformHandle(pipe.release().value(), &pipe_handle);
 
-  blocking_task_runner_->PostTask(
-      FROM_HERE, base::Bind(&RunCrashReporter, type, device_, board_, cpu_abi_,
-                            base::Passed(std::move(pipe_handle))));
+  base::PostTaskWithTraits(
+      FROM_HERE, {base::WithBaseSyncPrimitives()},
+      base::BindOnce(&RunCrashReporter, type, device_, board_, cpu_abi_,
+                     base::Passed(std::move(pipe_handle))));
 }
 
 void ArcCrashCollectorBridge::SetBuildProperties(const std::string& device,
diff --git a/components/arc/crash_collector/arc_crash_collector_bridge.h b/components/arc/crash_collector/arc_crash_collector_bridge.h
index ec4fcdf..220c8e17 100644
--- a/components/arc/crash_collector/arc_crash_collector_bridge.h
+++ b/components/arc/crash_collector/arc_crash_collector_bridge.h
@@ -8,16 +8,11 @@
 #include <string>
 
 #include "base/macros.h"
-#include "base/memory/ref_counted.h"
 #include "components/arc/arc_service.h"
 #include "components/arc/common/crash_collector.mojom.h"
 #include "components/arc/instance_holder.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
-namespace base {
-class TaskRunner;
-}  // namespace base
-
 namespace arc {
 
 class ArcBridgeService;
@@ -28,8 +23,7 @@
       public InstanceHolder<mojom::CrashCollectorInstance>::Observer,
       public mojom::CrashCollectorHost {
  public:
-  ArcCrashCollectorBridge(ArcBridgeService* bridge,
-                          scoped_refptr<base::TaskRunner> blocking_task_runner);
+  explicit ArcCrashCollectorBridge(ArcBridgeService* bridge);
   ~ArcCrashCollectorBridge() override;
 
   // InstanceHolder<mojom::CrashCollectorInstance>::Observer overrides.
@@ -43,8 +37,6 @@
                           const std::string& cpu_abi) override;
 
  private:
-  scoped_refptr<base::TaskRunner> blocking_task_runner_;
-
   mojo::Binding<mojom::CrashCollectorHost> binding_;
 
   std::string device_;
diff --git a/components/arc/intent_helper/activity_icon_loader.cc b/components/arc/intent_helper/activity_icon_loader.cc
index 73d0099..54c431864 100644
--- a/components/arc/intent_helper/activity_icon_loader.cc
+++ b/components/arc/intent_helper/activity_icon_loader.cc
@@ -13,7 +13,7 @@
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/task_runner_util.h"
+#include "base/task_scheduler/post_task.h"
 #include "components/arc/arc_bridge_service.h"
 #include "components/arc/arc_service_manager.h"
 #include "components/arc/arc_util.h"
@@ -240,10 +240,8 @@
     const OnIconsReadyCallback& cb,
     std::vector<mojom::ActivityIconPtr> icons) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  ArcServiceManager* manager = ArcServiceManager::Get();
   base::PostTaskAndReplyWithResult(
-      manager->blocking_task_runner().get(), FROM_HERE,
-      base::Bind(&ResizeAndEncodeIcons, base::Passed(&icons)),
+      FROM_HERE, base::Bind(&ResizeAndEncodeIcons, base::Passed(&icons)),
       base::Bind(&ActivityIconLoader::OnIconsResized,
                  weak_ptr_factory_.GetWeakPtr(), base::Passed(&cached_result),
                  cb));
diff --git a/components/autofill/android/BUILD.gn b/components/autofill/android/BUILD.gn
index 83f2b006..7515cb4 100644
--- a/components/autofill/android/BUILD.gn
+++ b/components/autofill/android/BUILD.gn
@@ -29,6 +29,7 @@
   deps = [
     "//base:base_java",
     "//content/public/android:content_java",
+    "//third_party/android_tools:android_support_annotations_java",
   ]
   java_files = [
     "java/src/org/chromium/components/autofill/AutofillProvider.java",
diff --git a/components/autofill/android/form_field_data_android.cc b/components/autofill/android/form_field_data_android.cc
index 15d5163..2df0b756 100644
--- a/components/autofill/android/form_field_data_android.cc
+++ b/components/autofill/android/form_field_data_android.cc
@@ -4,7 +4,9 @@
 
 #include "components/autofill/android/form_field_data_android.h"
 
+#include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
+#include "components/autofill/core/common/autofill_util.h"
 #include "jni/FormFieldData_jni.h"
 
 using base::android::AttachCurrentThread;
@@ -15,6 +17,7 @@
 using base::android::JavaRef;
 using base::android::ScopedJavaGlobalRef;
 using base::android::ScopedJavaLocalRef;
+using base::android::ToJavaArrayOfStrings;
 
 namespace autofill {
 
@@ -39,10 +42,16 @@
         ConvertUTF16ToJavaString(env, field_ptr_->id);
     ScopedJavaLocalRef<jstring> jtype =
         ConvertUTF8ToJavaString(env, field_ptr_->form_control_type);
+    ScopedJavaLocalRef<jobjectArray> joption_values =
+        ToJavaArrayOfStrings(env, field_ptr_->option_values);
+    ScopedJavaLocalRef<jobjectArray> joption_contents =
+        ToJavaArrayOfStrings(env, field_ptr_->option_contents);
 
     obj = Java_FormFieldData_createFormFieldData(
         env, jname, jlabel, jvalue, jautocomplete_attr,
-        field_ptr_->should_autocomplete, jplaceholder, jtype, jid);
+        field_ptr_->should_autocomplete, jplaceholder, jtype, jid,
+        joption_values, joption_contents, IsCheckable(field_ptr_->check_status),
+        IsChecked(field_ptr_->check_status));
     java_ref_ = JavaObjectWeakGlobalRef(env, obj);
   }
   return obj;
@@ -54,10 +63,16 @@
   ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
   if (obj.is_null())
     return;
-  ScopedJavaLocalRef<jstring> jvalue = Java_FormFieldData_getValue(env, obj);
-  if (jvalue.is_null())
-    return;
-  field_ptr_->value = ConvertJavaStringToUTF16(env, jvalue);
+
+  if (IsCheckable(field_ptr_->check_status)) {
+    bool checked = Java_FormFieldData_isChecked(env, obj);
+    SetCheckStatus(field_ptr_, true, checked);
+  } else {
+    ScopedJavaLocalRef<jstring> jvalue = Java_FormFieldData_getValue(env, obj);
+    if (jvalue.is_null())
+      return;
+    field_ptr_->value = ConvertJavaStringToUTF16(env, jvalue);
+  }
   field_ptr_->is_autofilled = true;
 }
 
diff --git a/components/autofill/android/java/src/org/chromium/components/autofill/AutofillProvider.java b/components/autofill/android/java/src/org/chromium/components/autofill/AutofillProvider.java
index 0b4c27a..28bd0ed 100644
--- a/components/autofill/android/java/src/org/chromium/components/autofill/AutofillProvider.java
+++ b/components/autofill/android/java/src/org/chromium/components/autofill/AutofillProvider.java
@@ -42,7 +42,7 @@
      * @param values the array of autofill values, the key is virtual id of form
      *            field.
      */
-    public abstract void autofill(final SparseArray<String> values);
+    public abstract void autofill(final SparseArray<Object> values);
 
     /**
      * Invoked when autofill service needs the form structure.
diff --git a/components/autofill/android/java/src/org/chromium/components/autofill/FormFieldData.java b/components/autofill/android/java/src/org/chromium/components/autofill/FormFieldData.java
index 6657bc1..8c8858cc 100644
--- a/components/autofill/android/java/src/org/chromium/components/autofill/FormFieldData.java
+++ b/components/autofill/android/java/src/org/chromium/components/autofill/FormFieldData.java
@@ -4,14 +4,29 @@
 
 package org.chromium.components.autofill;
 
+import android.support.annotation.IntDef;
+
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /**
  * The wrap class of native autofill::FormFieldDataAndroid.
  */
 @JNINamespace("autofill")
 public class FormFieldData {
+    /**
+     * Define the control types supported by android.view.autofill.AutofillValue.
+     */
+    @IntDef({TYPE_TEXT, TYPE_TOGGLE, TYPE_LIST})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface ControlType {}
+    public static final int TYPE_TEXT = 0;
+    public static final int TYPE_TOGGLE = 1;
+    public static final int TYPE_LIST = 2;
+
     public final String mLabel;
     public final String mName;
     public final String mAutocompleteAttr;
@@ -19,11 +34,17 @@
     public final String mPlaceholder;
     public final String mType;
     public final String mId;
+    public final String[] mOptionValues;
+    public final String[] mOptionContents;
+    public final @ControlType int mControlType;
 
+    private boolean mIsChecked;
     private String mValue;
 
     private FormFieldData(String name, String label, String value, String autocompleteAttr,
-            boolean shouldAutocomplete, String placeholder, String type, String id) {
+            boolean shouldAutocomplete, String placeholder, String type, String id,
+            String[] optionValues, String[] optionContents, boolean isCheckField,
+            boolean isChecked) {
         mName = name;
         mLabel = label;
         mValue = value;
@@ -32,6 +53,20 @@
         mPlaceholder = placeholder;
         mType = type;
         mId = id;
+        mOptionValues = optionValues;
+        mOptionContents = optionContents;
+        mIsChecked = isChecked;
+        if (mOptionValues != null && mOptionValues.length != 0) {
+            mControlType = TYPE_LIST;
+        } else if (isCheckField) {
+            mControlType = TYPE_TOGGLE;
+        } else {
+            mControlType = TYPE_TEXT;
+        }
+    }
+
+    public @ControlType int getControlType() {
+        return mControlType;
     }
 
     /**
@@ -48,10 +83,20 @@
     }
 
     @CalledByNative
+    public boolean isChecked() {
+        return mIsChecked;
+    }
+
+    public void setChecked(boolean checked) {
+        mIsChecked = checked;
+    }
+
+    @CalledByNative
     private static FormFieldData createFormFieldData(String name, String label, String value,
             String autocompleteAttr, boolean shouldAutocomplete, String placeholder, String type,
-            String id) {
-        return new FormFieldData(
-                name, label, value, autocompleteAttr, shouldAutocomplete, placeholder, type, id);
+            String id, String[] optionValues, String[] optionContents, boolean isCheckField,
+            boolean isChecked) {
+        return new FormFieldData(name, label, value, autocompleteAttr, shouldAutocomplete,
+                placeholder, type, id, optionValues, optionContents, isCheckField, isChecked);
     }
 }
diff --git a/components/autofill/core/browser/autofill_profile.cc b/components/autofill/core/browser/autofill_profile.cc
index e54c9fd..35bc590 100644
--- a/components/autofill/core/browser/autofill_profile.cc
+++ b/components/autofill/core/browser/autofill_profile.cc
@@ -309,6 +309,14 @@
   return form_group->SetInfo(type, trimmed_value, app_locale);
 }
 
+void AutofillProfile::GetSupportedTypes(
+    ServerFieldTypeSet* supported_types) const {
+  FormGroupList info = FormGroups();
+  for (const auto* form_group : info) {
+    form_group->GetSupportedTypes(supported_types);
+  }
+}
+
 bool AutofillProfile::IsEmpty(const std::string& app_locale) const {
   ServerFieldTypeSet types;
   GetNonEmptyTypes(app_locale, &types);
@@ -709,14 +717,6 @@
   RecordUse();
 }
 
-void AutofillProfile::GetSupportedTypes(
-    ServerFieldTypeSet* supported_types) const {
-  FormGroupList info = FormGroups();
-  for (const auto* form_group : info) {
-    form_group->GetSupportedTypes(supported_types);
-  }
-}
-
 // static
 void AutofillProfile::CreateInferredLabelsHelper(
     const std::vector<AutofillProfile*>& profiles,
diff --git a/components/autofill/core/browser/autofill_profile.h b/components/autofill/core/browser/autofill_profile.h
index a420dbe..de33113 100644
--- a/components/autofill/core/browser/autofill_profile.h
+++ b/components/autofill/core/browser/autofill_profile.h
@@ -65,6 +65,7 @@
   bool SetInfo(const AutofillType& type,
                const base::string16& value,
                const std::string& app_locale) override;
+  void GetSupportedTypes(ServerFieldTypeSet* supported_types) const override;
 
   // How this card is stored.
   RecordType record_type() const { return record_type_; }
@@ -191,9 +192,6 @@
  private:
   typedef std::vector<const FormGroup*> FormGroupList;
 
-  // FormGroup:
-  void GetSupportedTypes(ServerFieldTypeSet* supported_types) const override;
-
   // Creates inferred labels for |profiles| at indices corresponding to
   // |indices|, and stores the results to the corresponding elements of
   // |labels|. These labels include enough fields to differentiate among the
diff --git a/components/cast_channel/cast_socket.h b/components/cast_channel/cast_socket.h
index e51d26f2..566993b 100644
--- a/components/cast_channel/cast_socket.h
+++ b/components/cast_channel/cast_socket.h
@@ -234,16 +234,8 @@
   void Connect();
 
  private:
-  FRIEND_TEST_ALL_PREFIXES(CastSocketTest, TestConnectAuthMessageCorrupted);
-  FRIEND_TEST_ALL_PREFIXES(CastSocketTest,
-                           TestConnectChallengeReplyReceiveError);
-  FRIEND_TEST_ALL_PREFIXES(CastSocketTest,
-                           TestConnectChallengeVerificationFails);
-  FRIEND_TEST_ALL_PREFIXES(CastSocketTest, TestObservers);
+  FRIEND_TEST_ALL_PREFIXES(MockCastSocketTest, TestObservers);
   friend class AuthTransportDelegate;
-  friend class CastSocketMessageDelegate;
-  friend class CastSocketTest;
-  friend class TestCastSocket;
 
   void SetErrorState(ChannelError error_state) override;
 
diff --git a/components/cast_channel/cast_socket_unittest.cc b/components/cast_channel/cast_socket_unittest.cc
index bc4ae28..dc40a43 100644
--- a/components/cast_channel/cast_socket_unittest.cc
+++ b/components/cast_channel/cast_socket_unittest.cc
@@ -9,11 +9,13 @@
 #include <utility>
 #include <vector>
 
+#include "base/files/file_util.h"
 #include "base/location.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
 #include "base/message_loop/message_loop.h"
+#include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string_number_conversions.h"
@@ -27,13 +29,20 @@
 #include "components/cast_channel/cast_transport.h"
 #include "components/cast_channel/logger.h"
 #include "components/cast_channel/proto/cast_channel.pb.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "crypto/rsa_private_key.h"
 #include "net/base/address_list.h"
 #include "net/base/net_errors.h"
+#include "net/cert/pem_tokenizer.h"
+#include "net/log/net_log_source.h"
 #include "net/log/test_net_log.h"
 #include "net/socket/socket_test_util.h"
 #include "net/socket/ssl_client_socket.h"
+#include "net/socket/ssl_server_socket.h"
 #include "net/socket/tcp_client_socket.h"
+#include "net/socket/tcp_server_socket.h"
 #include "net/ssl/ssl_info.h"
+#include "net/ssl/ssl_server_config.h"
 #include "net/test/cert_test_util.h"
 #include "net/test/test_data_directory.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -41,7 +50,6 @@
 
 const int64_t kDistantTimeoutMillis = 100000;  // 100 seconds (never hit).
 
-using ::testing::_;
 using ::testing::A;
 using ::testing::DoAll;
 using ::testing::Invoke;
@@ -49,8 +57,10 @@
 using ::testing::NotNull;
 using ::testing::Return;
 using ::testing::SaveArg;
+using ::testing::_;
 
 namespace cast_channel {
+namespace {
 const char kAuthNamespace[] = "urn:x-cast:com.google.cast.tp.deviceauth";
 
 // Returns an auth challenge message inline.
@@ -83,6 +93,16 @@
   return test_message;
 }
 
+base::FilePath GetTestCertsDirectory() {
+  base::FilePath path;
+  PathService::Get(base::DIR_SOURCE_ROOT, &path);
+  path = path.Append(FILE_PATH_LITERAL("components"));
+  path = path.Append(FILE_PATH_LITERAL("test"));
+  path = path.Append(FILE_PATH_LITERAL("data"));
+  path = path.Append(FILE_PATH_LITERAL("cast_channel"));
+  return path;
+}
+
 class MockTCPSocket : public net::TCPClientSocket {
  public:
   explicit MockTCPSocket(const net::MockConnect& connect_data)
@@ -142,18 +162,6 @@
   DISALLOW_COPY_AND_ASSIGN(MockTCPSocket);
 };
 
-class MockDelegate : public CastTransport::Delegate {
- public:
-  MockDelegate() {}
-  virtual ~MockDelegate() {}
-  MOCK_METHOD1(OnError, void(ChannelError error_state));
-  MOCK_METHOD1(OnMessage, void(const CastMessage& message));
-  MOCK_METHOD0(Start, void());
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockDelegate);
-};
-
 class CompleteHandler {
  public:
   CompleteHandler() {}
@@ -167,31 +175,23 @@
   DISALLOW_COPY_AND_ASSIGN(CompleteHandler);
 };
 
-class TestCastSocket : public CastSocketImpl {
+class TestCastSocketBase : public CastSocketImpl {
  public:
-  static std::unique_ptr<TestCastSocket> CreateSecure(
-      Logger* logger,
-      uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) {
-    return std::unique_ptr<TestCastSocket>(
-        new TestCastSocket(CreateIPEndPointForTest(), kDistantTimeoutMillis,
-                           logger, device_capabilities));
-  }
+  TestCastSocketBase(const net::IPEndPoint& ip_endpoint,
+                     int64_t timeout_ms,
+                     Logger* logger,
+                     uint64_t device_capabilities)
+      : TestCastSocketBase(ip_endpoint,
+                           timeout_ms,
+                           logger,
+                           new net::TestNetLog(),
+                           device_capabilities) {}
 
-  TestCastSocket(const net::IPEndPoint& ip_endpoint,
-                 int64_t timeout_ms,
-                 Logger* logger,
-                 uint64_t device_capabilities)
-      : TestCastSocket(ip_endpoint,
-                       timeout_ms,
-                       logger,
-                       new net::TestNetLog(),
-                       device_capabilities) {}
-
-  TestCastSocket(const net::IPEndPoint& ip_endpoint,
-                 int64_t timeout_ms,
-                 Logger* logger,
-                 net::TestNetLog* capturing_net_log,
-                 uint64_t device_capabilities)
+  TestCastSocketBase(const net::IPEndPoint& ip_endpoint,
+                     int64_t timeout_ms,
+                     Logger* logger,
+                     net::TestNetLog* capturing_net_log,
+                     uint64_t device_capabilities)
       : CastSocketImpl(ip_endpoint,
                        capturing_net_log,
                        base::TimeDelta::FromMilliseconds(timeout_ms),
@@ -205,11 +205,66 @@
         extract_cert_result_(true),
         verify_challenge_result_(true),
         verify_challenge_disallow_(false),
-        tcp_unresponsive_(false),
-        mock_timer_(new base::MockTimer(false, false)),
-        mock_transport_(nullptr) {}
+        mock_timer_(new base::MockTimer(false, false)) {}
 
-  ~TestCastSocket() override {}
+  void SetExtractCertResult(bool value) { extract_cert_result_ = value; }
+
+  void SetVerifyChallengeResult(bool value) {
+    verify_challenge_result_ = value;
+  }
+
+  void TriggerTimeout() { mock_timer_->Fire(); }
+
+  bool TestVerifyChannelPolicyNone() {
+    AuthResult authResult;
+    return VerifyChannelPolicy(authResult);
+  }
+
+  void DisallowVerifyChallengeResult() { verify_challenge_disallow_ = true; }
+
+ protected:
+  ~TestCastSocketBase() override {}
+
+  scoped_refptr<net::X509Certificate> ExtractPeerCert() override {
+    return extract_cert_result_
+               ? net::ImportCertFromFile(GetTestCertsDirectory(),
+                                         "self_signed.pem")
+               : nullptr;
+  }
+
+  bool VerifyChallengeReply() override {
+    EXPECT_FALSE(verify_challenge_disallow_);
+    return verify_challenge_result_;
+  }
+
+  base::Timer* GetTimer() override { return mock_timer_.get(); }
+
+  std::unique_ptr<net::TestNetLog> capturing_net_log_;
+  net::IPEndPoint ip_;
+  // Simulated result of peer cert extraction.
+  bool extract_cert_result_;
+  // Simulated result of verifying challenge reply.
+  bool verify_challenge_result_;
+  bool verify_challenge_disallow_;
+  std::unique_ptr<base::MockTimer> mock_timer_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(TestCastSocketBase);
+};
+
+class MockTestCastSocket : public TestCastSocketBase {
+ public:
+  static std::unique_ptr<MockTestCastSocket> CreateSecure(
+      Logger* logger,
+      uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) {
+    return std::unique_ptr<MockTestCastSocket>(
+        new MockTestCastSocket(CreateIPEndPointForTest(), kDistantTimeoutMillis,
+                               logger, device_capabilities));
+  }
+
+  using TestCastSocketBase::TestCastSocketBase;
+
+  ~MockTestCastSocket() override {}
 
   void SetupMockTransport() {
     mock_transport_ = new MockCastTransport;
@@ -218,10 +273,10 @@
 
   // Socket connection helpers.
   void SetupTcpConnect(net::IoMode mode, int result) {
-    tcp_connect_data_.reset(new net::MockConnect(mode, result));
+    tcp_connect_data_.reset(new net::MockConnect(mode, result, ip_));
   }
   void SetupSslConnect(net::IoMode mode, int result) {
-    ssl_connect_data_.reset(new net::MockConnect(mode, result));
+    ssl_connect_data_.reset(new net::MockConnect(mode, result, ip_));
   }
 
   // Socket I/O helpers.
@@ -243,27 +298,12 @@
   // Helpers for modifying other connection-related behaviors.
   void SetupTcpConnectUnresponsive() { tcp_unresponsive_ = true; }
 
-  void SetExtractCertResult(bool value) { extract_cert_result_ = value; }
-
-  void SetVerifyChallengeResult(bool value) {
-    verify_challenge_result_ = value;
-  }
-
-  void TriggerTimeout() { mock_timer_->Fire(); }
-
-  bool TestVerifyChannelPolicyNone() {
-    AuthResult authResult;
-    return VerifyChannelPolicy(authResult);
-  }
-
   bool TestVerifyChannelPolicyAudioOnly() {
     AuthResult authResult;
     authResult.channel_policies |= AuthResult::POLICY_AUDIO_ONLY;
     return VerifyChannelPolicy(authResult);
   }
 
-  void DisallowVerifyChallengeResult() { verify_challenge_disallow_ = true; }
-
   MockCastTransport* GetMockTransport() {
     CHECK(mock_transport_);
     return mock_transport_;
@@ -274,42 +314,21 @@
     if (tcp_unresponsive_) {
       return std::unique_ptr<net::TCPClientSocket>(new MockTCPSocket(true));
     } else {
-      net::MockConnect* connect_data = tcp_connect_data_.get();
-      connect_data->peer_addr = ip_;
       return std::unique_ptr<net::TCPClientSocket>(
-          new MockTCPSocket(*connect_data));
+          new MockTCPSocket(*tcp_connect_data_));
     }
   }
 
   std::unique_ptr<net::SSLClientSocket> CreateSslSocket(
-      std::unique_ptr<net::StreamSocket> socket) override {
-    net::MockConnect* connect_data = ssl_connect_data_.get();
-    connect_data->peer_addr = ip_;
-
+      std::unique_ptr<net::StreamSocket>) override {
     ssl_data_.reset(new net::StaticSocketDataProvider(
         reads_.data(), reads_.size(), writes_.data(), writes_.size()));
-    ssl_data_->set_connect_data(*connect_data);
+    ssl_data_->set_connect_data(*ssl_connect_data_);
     // NOTE: net::MockTCPClientSocket inherits from net::SSLClientSocket !!
     return std::unique_ptr<net::SSLClientSocket>(new net::MockTCPClientSocket(
         net::AddressList(), capturing_net_log_.get(), ssl_data_.get()));
   }
 
-  scoped_refptr<net::X509Certificate> ExtractPeerCert() override {
-    return extract_cert_result_
-               ? net::ImportCertFromFile(net::GetTestCertsDirectory(),
-                                         "ok_cert.pem")
-               : nullptr;
-  }
-
-  bool VerifyChallengeReply() override {
-    EXPECT_FALSE(verify_challenge_disallow_);
-    return verify_challenge_result_;
-  }
-
-  base::Timer* GetTimer() override { return mock_timer_.get(); }
-
-  std::unique_ptr<net::TestNetLog> capturing_net_log_;
-  net::IPEndPoint ip_;
   // Simulated connect data
   std::unique_ptr<net::MockConnect> tcp_connect_data_;
   std::unique_ptr<net::MockConnect> ssl_connect_data_;
@@ -317,27 +336,66 @@
   std::vector<net::MockWrite> writes_;
   std::vector<net::MockRead> reads_;
   std::unique_ptr<net::SocketDataProvider> ssl_data_;
-  // Simulated result of peer cert extraction.
-  bool extract_cert_result_;
-  // Simulated result of verifying challenge reply.
-  bool verify_challenge_result_;
-  bool verify_challenge_disallow_;
   // If true, makes TCP connection process stall. For timeout testing.
-  bool tcp_unresponsive_;
-  std::unique_ptr<base::MockTimer> mock_timer_;
-  MockCastTransport* mock_transport_;
+  bool tcp_unresponsive_ = false;
+  MockCastTransport* mock_transport_ = nullptr;
 
-  DISALLOW_COPY_AND_ASSIGN(TestCastSocket);
+  DISALLOW_COPY_AND_ASSIGN(MockTestCastSocket);
 };
 
-class CastSocketTest : public testing::Test {
+class SslTestCastSocket : public TestCastSocketBase {
  public:
-  CastSocketTest()
-      : logger_(new Logger()), observer_(new MockCastSocketObserver()) {}
-  ~CastSocketTest() override {}
+  static std::unique_ptr<SslTestCastSocket> CreateSecure(
+      Logger* logger,
+      uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) {
+    return std::unique_ptr<SslTestCastSocket>(
+        new SslTestCastSocket(CreateIPEndPointForTest(), kDistantTimeoutMillis,
+                              logger, device_capabilities));
+  }
+
+  using TestCastSocketBase::TestCastSocketBase;
+
+  void SetTcpSocket(std::unique_ptr<net::TCPClientSocket> tcp_client_socket) {
+    tcp_client_socket_ = std::move(tcp_client_socket);
+  }
+
+ private:
+  std::unique_ptr<net::TCPClientSocket> CreateTcpSocket() override {
+    return std::move(tcp_client_socket_);
+  }
+
+  std::unique_ptr<net::TCPClientSocket> tcp_client_socket_;
+};
+
+class CastSocketTestBase : public testing::Test {
+ protected:
+  CastSocketTestBase()
+      : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
+        logger_(new Logger()),
+        observer_(new MockCastSocketObserver()) {}
+  ~CastSocketTestBase() override {}
 
   void SetUp() override { EXPECT_CALL(*observer_, OnMessage(_, _)).Times(0); }
 
+  // Runs all pending tasks in the message loop.
+  void RunPendingTasks() {
+    base::RunLoop run_loop;
+    run_loop.RunUntilIdle();
+  }
+
+  content::TestBrowserThreadBundle thread_bundle_;
+  Logger* logger_;
+  CompleteHandler handler_;
+  std::unique_ptr<MockCastSocketObserver> observer_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(CastSocketTestBase);
+};
+
+class MockCastSocketTest : public CastSocketTestBase {
+ protected:
+  MockCastSocketTest() {}
+
   void TearDown() override {
     if (socket_.get()) {
       EXPECT_CALL(handler_, OnCloseComplete(net::OK));
@@ -347,7 +405,7 @@
   }
 
   void CreateCastSocketSecure() {
-    socket_ = TestCastSocket::CreateSecure(logger_);
+    socket_ = MockTestCastSocket::CreateSecure(logger_);
   }
 
   void HandleAuthHandshake() {
@@ -358,6 +416,7 @@
         .WillOnce(PostCompletionCallbackTask<1>(net::OK));
     EXPECT_CALL(*socket_->GetMockTransport(), Start());
     EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::NONE));
+    socket_->AddObserver(observer_.get());
     socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
                                 base::Unretained(&handler_)));
     RunPendingTasks();
@@ -366,23 +425,161 @@
     RunPendingTasks();
   }
 
- protected:
-  // Runs all pending tasks in the message loop.
-  void RunPendingTasks() {
-    base::RunLoop run_loop;
-    run_loop.RunUntilIdle();
-  }
-
-  base::MessageLoop message_loop_;
-  Logger* logger_;
-  std::unique_ptr<TestCastSocket> socket_;
-  CompleteHandler handler_;
-  std::unique_ptr<MockCastSocketObserver> observer_;
+  std::unique_ptr<MockTestCastSocket> socket_;
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(CastSocketTest);
+  DISALLOW_COPY_AND_ASSIGN(MockCastSocketTest);
 };
 
+class SslCastSocketTest : public CastSocketTestBase {
+ protected:
+  SslCastSocketTest() {}
+
+  void TearDown() override {
+    if (socket_.get()) {
+      EXPECT_CALL(handler_, OnCloseComplete(net::OK));
+      socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete,
+                                base::Unretained(&handler_)));
+    }
+  }
+
+  void CreateSockets() {
+    socket_ = SslTestCastSocket::CreateSecure(logger_);
+
+    server_cert_ =
+        net::ImportCertFromFile(GetTestCertsDirectory(), "self_signed.pem");
+    ASSERT_TRUE(server_cert_);
+    server_private_key_ = ReadTestKeyFromPEM("self_signed.pem");
+    ASSERT_TRUE(server_private_key_);
+    server_context_ = CreateSSLServerContext(
+        server_cert_.get(), *server_private_key_, server_ssl_config_);
+
+    tcp_server_socket_.reset(
+        new net::TCPServerSocket(nullptr, net::NetLogSource()));
+    ASSERT_EQ(net::OK,
+              tcp_server_socket_->ListenWithAddressAndPort("127.0.0.1", 0, 1));
+    net::IPEndPoint server_address;
+    ASSERT_EQ(net::OK, tcp_server_socket_->GetLocalAddress(&server_address));
+    tcp_client_socket_.reset(
+        new net::TCPClientSocket(net::AddressList(server_address), nullptr,
+                                 nullptr, net::NetLogSource()));
+
+    std::unique_ptr<net::StreamSocket> accepted_socket;
+    accept_result_ = tcp_server_socket_->Accept(
+        &accepted_socket, base::Bind(&SslCastSocketTest::TcpAcceptCallback,
+                                     base::Unretained(this)));
+    connect_result_ = tcp_client_socket_->Connect(base::Bind(
+        &SslCastSocketTest::TcpConnectCallback, base::Unretained(this)));
+    while (accept_result_ == net::ERR_IO_PENDING ||
+           connect_result_ == net::ERR_IO_PENDING) {
+      RunPendingTasks();
+    }
+    ASSERT_EQ(net::OK, accept_result_);
+    ASSERT_EQ(net::OK, connect_result_);
+    ASSERT_TRUE(accepted_socket);
+    ASSERT_TRUE(tcp_client_socket_->IsConnected());
+
+    server_socket_ =
+        server_context_->CreateSSLServerSocket(std::move(accepted_socket));
+    ASSERT_TRUE(server_socket_);
+
+    socket_->SetTcpSocket(std::move(tcp_client_socket_));
+  }
+
+  void ConnectSockets() {
+    socket_->AddObserver(observer_.get());
+    socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
+                                base::Unretained(&handler_)));
+
+    net::TestCompletionCallback handshake_callback;
+    int server_ret = handshake_callback.GetResult(
+        server_socket_->Handshake(handshake_callback.callback()));
+
+    ASSERT_EQ(net::OK, server_ret);
+  }
+
+  void TcpAcceptCallback(int result) { accept_result_ = result; }
+
+  void TcpConnectCallback(int result) { connect_result_ = result; }
+
+  std::unique_ptr<crypto::RSAPrivateKey> ReadTestKeyFromPEM(
+      const base::StringPiece& name) {
+    base::FilePath key_path = GetTestCertsDirectory().AppendASCII(name);
+    std::vector<std::string> headers({"PRIVATE KEY"});
+    std::string pem_data;
+    if (!base::ReadFileToString(key_path, &pem_data)) {
+      return nullptr;
+    }
+    net::PEMTokenizer pem_tokenizer(pem_data, headers);
+    if (!pem_tokenizer.GetNext()) {
+      return nullptr;
+    }
+    std::vector<uint8_t> key_vector(pem_tokenizer.data().begin(),
+                                    pem_tokenizer.data().end());
+    std::unique_ptr<crypto::RSAPrivateKey> key(
+        crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_vector));
+    return key;
+  }
+
+  int ReadExactLength(net::IOBuffer* buffer,
+                      int buffer_length,
+                      net::Socket* socket) {
+    scoped_refptr<net::DrainableIOBuffer> draining_buffer(
+        new net::DrainableIOBuffer(buffer, buffer_length));
+    while (draining_buffer->BytesRemaining() > 0) {
+      net::TestCompletionCallback read_callback;
+      int read_result = read_callback.GetResult(server_socket_->Read(
+          draining_buffer.get(), draining_buffer->BytesRemaining(),
+          read_callback.callback()));
+      EXPECT_GT(read_result, 0);
+      draining_buffer->DidConsume(read_result);
+    }
+    return buffer_length;
+  }
+
+  int WriteExactLength(net::IOBuffer* buffer,
+                       int buffer_length,
+                       net::Socket* socket) {
+    scoped_refptr<net::DrainableIOBuffer> draining_buffer(
+        new net::DrainableIOBuffer(buffer, buffer_length));
+    while (draining_buffer->BytesRemaining() > 0) {
+      net::TestCompletionCallback write_callback;
+      int write_result = write_callback.GetResult(server_socket_->Write(
+          draining_buffer.get(), draining_buffer->BytesRemaining(),
+          write_callback.callback()));
+      EXPECT_GT(write_result, 0);
+      draining_buffer->DidConsume(write_result);
+    }
+    return buffer_length;
+  }
+
+  // Result values used for TCP socket setup.  These should contain values from
+  // net::Error.
+  int accept_result_;
+  int connect_result_;
+
+  // Underlying TCP sockets for |socket_| to communicate with |server_socket_|
+  // when testing with the real SSL implementation.
+  std::unique_ptr<net::TCPClientSocket> tcp_client_socket_;
+  std::unique_ptr<net::TCPServerSocket> tcp_server_socket_;
+
+  std::unique_ptr<SslTestCastSocket> socket_;
+
+  // |server_socket_| is used for the *RealSSL tests in order to test the
+  // CastSocket over a real SSL socket.  The other members below are used to
+  // initialize |server_socket_|.
+  std::unique_ptr<net::SSLServerSocket> server_socket_;
+  std::unique_ptr<net::SSLServerContext> server_context_;
+  std::unique_ptr<crypto::RSAPrivateKey> server_private_key_;
+  scoped_refptr<net::X509Certificate> server_cert_;
+  net::SSLServerConfig server_ssl_config_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(SslCastSocketTest);
+};
+
+}  // namespace
+
 // Tests that the following connection flow works:
 // - TCP connection succeeds (async)
 // - SSL connection succeeds (async)
@@ -390,7 +587,7 @@
 // - Challenge request is sent (async)
 // - Challenge response is received (async)
 // - Credentials are verified successfuly
-TEST_F(CastSocketTest, TestConnectFullSecureFlowAsync) {
+TEST_F(MockCastSocketTest, TestConnectFullSecureFlowAsync) {
   CreateCastSocketSecure();
   socket_->SetupTcpConnect(net::ASYNC, net::OK);
   socket_->SetupSslConnect(net::ASYNC, net::OK);
@@ -408,7 +605,7 @@
 // - Challenge request is sent (sync)
 // - Challenge response is received (sync)
 // - Credentials are verified successfuly
-TEST_F(CastSocketTest, TestConnectFullSecureFlowSync) {
+TEST_F(MockCastSocketTest, TestConnectFullSecureFlowSync) {
   CreateCastSocketSecure();
   socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
   socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
@@ -421,7 +618,7 @@
 
 // Test that an AuthMessage with a mangled namespace triggers cancelation
 // of the connection event loop.
-TEST_F(CastSocketTest, TestConnectAuthMessageCorrupted) {
+TEST_F(MockCastSocketTest, TestConnectAuthMessageCorrupted) {
   CreateCastSocketSecure();
   socket_->SetupMockTransport();
 
@@ -453,7 +650,7 @@
 }
 
 // Test connection error - TCP connect fails (async)
-TEST_F(CastSocketTest, TestConnectTcpConnectErrorAsync) {
+TEST_F(MockCastSocketTest, TestConnectTcpConnectErrorAsync) {
   CreateCastSocketSecure();
 
   socket_->SetupTcpConnect(net::ASYNC, net::ERR_FAILED);
@@ -468,7 +665,7 @@
 }
 
 // Test connection error - TCP connect fails (sync)
-TEST_F(CastSocketTest, TestConnectTcpConnectErrorSync) {
+TEST_F(MockCastSocketTest, TestConnectTcpConnectErrorSync) {
   CreateCastSocketSecure();
 
   socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_FAILED);
@@ -483,7 +680,7 @@
 }
 
 // Test connection error - timeout
-TEST_F(CastSocketTest, TestConnectTcpTimeoutError) {
+TEST_F(MockCastSocketTest, TestConnectTcpTimeoutError) {
   CreateCastSocketSecure();
   socket_->SetupTcpConnectUnresponsive();
   EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT));
@@ -503,7 +700,7 @@
 }
 
 // Test connection error - TCP socket returns timeout
-TEST_F(CastSocketTest, TestConnectTcpSocketTimeoutError) {
+TEST_F(MockCastSocketTest, TestConnectTcpSocketTimeoutError) {
   CreateCastSocketSecure();
   socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT);
   EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT));
@@ -520,7 +717,7 @@
 }
 
 // Test connection error - SSL connect fails (async)
-TEST_F(CastSocketTest, TestConnectSslConnectErrorAsync) {
+TEST_F(MockCastSocketTest, TestConnectSslConnectErrorAsync) {
   CreateCastSocketSecure();
 
   socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
@@ -537,7 +734,7 @@
 }
 
 // Test connection error - SSL connect fails (sync)
-TEST_F(CastSocketTest, TestConnectSslConnectErrorSync) {
+TEST_F(MockCastSocketTest, TestConnectSslConnectErrorSync) {
   CreateCastSocketSecure();
 
   socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
@@ -556,7 +753,7 @@
 }
 
 // Test connection error - SSL connect times out (sync)
-TEST_F(CastSocketTest, TestConnectSslConnectTimeoutSync) {
+TEST_F(MockCastSocketTest, TestConnectSslConnectTimeoutSync) {
   CreateCastSocketSecure();
 
   socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
@@ -574,7 +771,7 @@
 }
 
 // Test connection error - SSL connect times out (async)
-TEST_F(CastSocketTest, TestConnectSslConnectTimeoutAsync) {
+TEST_F(MockCastSocketTest, TestConnectSslConnectTimeoutAsync) {
   CreateCastSocketSecure();
 
   socket_->SetupTcpConnect(net::ASYNC, net::OK);
@@ -590,7 +787,7 @@
 }
 
 // Test connection error - challenge send fails
-TEST_F(CastSocketTest, TestConnectChallengeSendError) {
+TEST_F(MockCastSocketTest, TestConnectChallengeSendError) {
   CreateCastSocketSecure();
   socket_->SetupMockTransport();
 
@@ -611,7 +808,7 @@
 
 // Test connection error - connection is destroyed after the challenge is
 // sent, with the async result still lurking in the task queue.
-TEST_F(CastSocketTest, TestConnectDestroyedAfterChallengeSent) {
+TEST_F(MockCastSocketTest, TestConnectDestroyedAfterChallengeSent) {
   CreateCastSocketSecure();
   socket_->SetupMockTransport();
   socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
@@ -626,7 +823,7 @@
 }
 
 // Test connection error - challenge reply receive fails
-TEST_F(CastSocketTest, TestConnectChallengeReplyReceiveError) {
+TEST_F(MockCastSocketTest, TestConnectChallengeReplyReceiveError) {
   CreateCastSocketSecure();
   socket_->SetupMockTransport();
 
@@ -651,7 +848,7 @@
   EXPECT_EQ(ChannelError::CAST_SOCKET_ERROR, socket_->error_state());
 }
 
-TEST_F(CastSocketTest, TestConnectChallengeVerificationFails) {
+TEST_F(MockCastSocketTest, TestConnectChallengeVerificationFails) {
   CreateCastSocketSecure();
   socket_->SetupMockTransport();
   socket_->SetupTcpConnect(net::ASYNC, net::OK);
@@ -679,7 +876,7 @@
 
 // Sends message data through an actual non-mocked CastTransport object,
 // testing the two components in integration.
-TEST_F(CastSocketTest, TestConnectEndToEndWithRealTransportAsync) {
+TEST_F(MockCastSocketTest, TestConnectEndToEndWithRealTransportAsync) {
   CreateCastSocketSecure();
   socket_->SetupTcpConnect(net::ASYNC, net::OK);
   socket_->SetupSslConnect(net::ASYNC, net::OK);
@@ -721,7 +918,7 @@
 }
 
 // Same as TestConnectEndToEndWithRealTransportAsync, except synchronous.
-TEST_F(CastSocketTest, TestConnectEndToEndWithRealTransportSync) {
+TEST_F(MockCastSocketTest, TestConnectEndToEndWithRealTransportSync) {
   CreateCastSocketSecure();
   socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
   socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
@@ -762,7 +959,7 @@
   EXPECT_EQ(ChannelError::NONE, socket_->error_state());
 }
 
-TEST_F(CastSocketTest, TestObservers) {
+TEST_F(MockCastSocketTest, TestObservers) {
   CreateCastSocketSecure();
   // Test AddObserever
   MockCastSocketObserver observer1;
@@ -779,7 +976,7 @@
   delegate.OnError(cast_channel::ChannelError::CONNECT_ERROR);
 }
 
-TEST_F(CastSocketTest, TestOpenChannelConnectingSocket) {
+TEST_F(MockCastSocketTest, TestOpenChannelConnectingSocket) {
   CreateCastSocketSecure();
   socket_->SetupTcpConnectUnresponsive();
   socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
@@ -794,7 +991,7 @@
   RunPendingTasks();
 }
 
-TEST_F(CastSocketTest, TestOpenChannelConnectedSocket) {
+TEST_F(MockCastSocketTest, TestOpenChannelConnectedSocket) {
   CreateCastSocketSecure();
   socket_->SetupTcpConnect(net::ASYNC, net::OK);
   socket_->SetupSslConnect(net::ASYNC, net::OK);
@@ -806,7 +1003,7 @@
                               base::Unretained(&handler_)));
 }
 
-TEST_F(CastSocketTest, TestOpenChannelClosedSocket) {
+TEST_F(MockCastSocketTest, TestOpenChannelClosedSocket) {
   CreateCastSocketSecure();
   socket_->SetupTcpConnect(net::ASYNC, net::ERR_FAILED);
 
@@ -820,4 +1017,108 @@
                               base::Unretained(&handler_)));
 }
 
+// Tests connecting through an actual non-mocked CastTransport object and
+// non-mocked SSLClientSocket, testing the components in integration.
+TEST_F(SslCastSocketTest, TestConnectEndToEndWithRealSSL) {
+  CreateSockets();
+  ConnectSockets();
+
+  // Set low-level auth challenge expectations.
+  CastMessage challenge = CreateAuthChallenge();
+  std::string challenge_str;
+  EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
+
+  int challenge_buffer_length = challenge_str.size();
+  scoped_refptr<net::IOBuffer> challenge_buffer(
+      new net::IOBuffer(challenge_buffer_length));
+  int read = ReadExactLength(challenge_buffer.get(), challenge_buffer_length,
+                             server_socket_.get());
+
+  EXPECT_EQ(challenge_buffer_length, read);
+  EXPECT_EQ(challenge_str,
+            std::string(challenge_buffer->data(), challenge_buffer_length));
+
+  // Set low-level auth reply expectations.
+  CastMessage reply = CreateAuthReply();
+  std::string reply_str;
+  EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
+
+  scoped_refptr<net::StringIOBuffer> reply_buffer(
+      new net::StringIOBuffer(reply_str));
+  int written = WriteExactLength(reply_buffer.get(), reply_buffer->size(),
+                                 server_socket_.get());
+
+  EXPECT_EQ(reply_buffer->size(), written);
+  EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::NONE));
+  RunPendingTasks();
+
+  EXPECT_EQ(ReadyState::OPEN, socket_->ready_state());
+  EXPECT_EQ(ChannelError::NONE, socket_->error_state());
+}
+
+// Sends message data through an actual non-mocked CastTransport object and
+// non-mocked SSLClientSocket, testing the components in integration.
+TEST_F(SslCastSocketTest, TestMessageEndToEndWithRealSSL) {
+  CreateSockets();
+  ConnectSockets();
+
+  // Set low-level auth challenge expectations.
+  CastMessage challenge = CreateAuthChallenge();
+  std::string challenge_str;
+  EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
+
+  int challenge_buffer_length = challenge_str.size();
+  scoped_refptr<net::IOBuffer> challenge_buffer(
+      new net::IOBuffer(challenge_buffer_length));
+
+  int read = ReadExactLength(challenge_buffer.get(), challenge_buffer_length,
+                             server_socket_.get());
+
+  EXPECT_EQ(challenge_buffer_length, read);
+  EXPECT_EQ(challenge_str,
+            std::string(challenge_buffer->data(), challenge_buffer_length));
+
+  // Set low-level auth reply expectations.
+  CastMessage reply = CreateAuthReply();
+  std::string reply_str;
+  EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
+
+  scoped_refptr<net::StringIOBuffer> reply_buffer(
+      new net::StringIOBuffer(reply_str));
+  int written = WriteExactLength(reply_buffer.get(), reply_buffer->size(),
+                                 server_socket_.get());
+
+  EXPECT_EQ(reply_buffer->size(), written);
+  EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::NONE));
+  RunPendingTasks();
+
+  EXPECT_EQ(ReadyState::OPEN, socket_->ready_state());
+  EXPECT_EQ(ChannelError::NONE, socket_->error_state());
+
+  // Send a test message through the ssl socket.
+  CastMessage test_message = CreateTestMessage();
+  std::string test_message_str;
+  EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str));
+
+  int test_message_length = test_message_str.size();
+  scoped_refptr<net::IOBuffer> test_message_buffer(
+      new net::IOBuffer(test_message_length));
+
+  EXPECT_CALL(handler_, OnWriteComplete(net::OK));
+  socket_->transport()->SendMessage(
+      test_message, base::Bind(&CompleteHandler::OnWriteComplete,
+                               base::Unretained(&handler_)));
+  RunPendingTasks();
+
+  read = ReadExactLength(test_message_buffer.get(), test_message_length,
+                         server_socket_.get());
+
+  EXPECT_EQ(test_message_length, read);
+  EXPECT_EQ(test_message_str,
+            std::string(test_message_buffer->data(), test_message_length));
+
+  EXPECT_EQ(ReadyState::OPEN, socket_->ready_state());
+  EXPECT_EQ(ChannelError::NONE, socket_->error_state());
+}
+
 }  // namespace cast_channel
diff --git a/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection.cc b/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection.cc
index 30364b7..97230be 100644
--- a/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection.cc
+++ b/components/cryptauth/ble/bluetooth_low_energy_weave_client_connection.cc
@@ -359,7 +359,7 @@
     device::BluetoothDevice::ConnectErrorCode error_code) {
   DCHECK(sub_status_ == SubStatus::WAITING_GATT_CONNECTION);
   PA_LOG(WARNING) << "Error creating GATT connection to "
-                  << remote_device().bluetooth_address
+                  << remote_device().GetTruncatedDeviceIdForLogs()
                   << ". Error code: " << error_code;
   DestroyConnection();
 }
diff --git a/components/exo/keyboard_unittest.cc b/components/exo/keyboard_unittest.cc
index c82c7c6..74fed6ea 100644
--- a/components/exo/keyboard_unittest.cc
+++ b/components/exo/keyboard_unittest.cc
@@ -2,17 +2,21 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "components/exo/keyboard.h"
+
 #include "ash/shell.h"
+#include "ash/wm/maximize_mode/maximize_mode_controller.h"
 #include "base/macros.h"
 #include "components/exo/buffer.h"
-#include "components/exo/keyboard.h"
 #include "components/exo/keyboard_delegate.h"
+#include "components/exo/keyboard_device_configuration_delegate.h"
 #include "components/exo/shell_surface.h"
 #include "components/exo/surface.h"
 #include "components/exo/test/exo_test_base.h"
 #include "components/exo/test/exo_test_helper.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "ui/aura/client/focus_client.h"
+#include "ui/events/devices/device_data_manager.h"
 #include "ui/events/keycodes/dom/dom_code.h"
 #include "ui/events/test/event_generator.h"
 
@@ -35,6 +39,16 @@
   MOCK_METHOD1(OnKeyboardModifiers, void(int));
 };
 
+class MockKeyboardDeviceConfigurationDelegate
+    : public KeyboardDeviceConfigurationDelegate {
+ public:
+  MockKeyboardDeviceConfigurationDelegate() {}
+
+  // Overridden from KeyboardDeviceConfigurationDelegate:
+  MOCK_METHOD1(OnKeyboardDestroying, void(Keyboard*));
+  MOCK_METHOD1(OnKeyboardTypeChanged, void(bool));
+};
+
 TEST_F(KeyboardTest, OnKeyboardEnter) {
   std::unique_ptr<Surface> surface(new Surface);
   std::unique_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
@@ -189,5 +203,54 @@
   keyboard.reset();
 }
 
+TEST_F(KeyboardTest, OnKeyboardTypeChanged) {
+  std::unique_ptr<Surface> surface(new Surface);
+  std::unique_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
+  gfx::Size buffer_size(10, 10);
+  std::unique_ptr<Buffer> buffer(
+      new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)));
+  surface->Attach(buffer.get());
+  surface->Commit();
+
+  aura::client::FocusClient* focus_client =
+      aura::client::GetFocusClient(ash::Shell::GetPrimaryRootWindow());
+  focus_client->FocusWindow(nullptr);
+
+  ui::DeviceDataManager* device_data_manager =
+      ui::DeviceDataManager::GetInstance();
+  ASSERT_TRUE(device_data_manager != nullptr);
+  const std::vector<ui::InputDevice> keyboards =
+      device_data_manager->GetKeyboardDevices();
+
+  ash::MaximizeModeController* maximize_mode_controller =
+      ash::Shell::Get()->maximize_mode_controller();
+  maximize_mode_controller->EnableMaximizeModeWindowManager(true);
+
+  MockKeyboardDelegate delegate;
+  std::unique_ptr<Keyboard> keyboard(new Keyboard(&delegate));
+  MockKeyboardDeviceConfigurationDelegate configuration_delegate;
+
+  EXPECT_CALL(configuration_delegate, OnKeyboardTypeChanged(true));
+  keyboard->SetDeviceConfigurationDelegate(&configuration_delegate);
+  EXPECT_TRUE(keyboard->HasDeviceConfigurationDelegate());
+
+  // Removing all keyboard devices in maximize mode calls
+  // OnKeyboardTypeChanged() with false.
+  EXPECT_CALL(configuration_delegate, OnKeyboardTypeChanged(false));
+  static_cast<ui::DeviceHotplugEventObserver*>(device_data_manager)
+      ->OnKeyboardDevicesUpdated(std::vector<ui::InputDevice>({}));
+
+  // Re-adding keyboards calls OnKeyboardTypeChanged() with true;
+  EXPECT_CALL(configuration_delegate, OnKeyboardTypeChanged(true));
+  static_cast<ui::DeviceHotplugEventObserver*>(device_data_manager)
+      ->OnKeyboardDevicesUpdated(keyboards);
+
+  EXPECT_CALL(delegate, OnKeyboardDestroying(keyboard.get()));
+  EXPECT_CALL(configuration_delegate, OnKeyboardDestroying(keyboard.get()));
+  keyboard.reset();
+
+  maximize_mode_controller->EnableMaximizeModeWindowManager(false);
+}
+
 }  // namespace
 }  // namespace exo
diff --git a/components/leveldb/leveldb_app.cc b/components/leveldb/leveldb_app.cc
index cd5447e..c39ae28 100644
--- a/components/leveldb/leveldb_app.cc
+++ b/components/leveldb/leveldb_app.cc
@@ -4,12 +4,15 @@
 
 #include "components/leveldb/leveldb_app.h"
 
+#include "base/task_scheduler/post_task.h"
 #include "components/leveldb/leveldb_service_impl.h"
 #include "services/service_manager/public/cpp/service_context.h"
 
 namespace leveldb {
 
-LevelDBApp::LevelDBApp() : file_thread_("LevelDBFile") {
+LevelDBApp::LevelDBApp()
+    : file_task_runner_(base::CreateSequencedTaskRunnerWithTraits(
+          {base::MayBlock(), base::TaskShutdownBehavior::BLOCK_SHUTDOWN})) {
   registry_.AddInterface<mojom::LevelDBService>(
       base::Bind(&LevelDBApp::Create, base::Unretained(this)));
 }
@@ -29,10 +32,7 @@
 void LevelDBApp::Create(const service_manager::BindSourceInfo& source_info,
                         leveldb::mojom::LevelDBServiceRequest request) {
   if (!service_) {
-    if (!file_thread_.IsRunning())
-      file_thread_.Start();
-    service_.reset(
-        new LevelDBServiceImpl(file_thread_.message_loop()->task_runner()));
+    service_.reset(new LevelDBServiceImpl(file_task_runner_));
   }
   bindings_.AddBinding(service_.get(), std::move(request));
 }
diff --git a/components/leveldb/leveldb_app.h b/components/leveldb/leveldb_app.h
index 78d542b3..dd1ed71 100644
--- a/components/leveldb/leveldb_app.h
+++ b/components/leveldb/leveldb_app.h
@@ -7,12 +7,15 @@
 
 #include <memory>
 
-#include "base/threading/thread.h"
 #include "components/leveldb/public/interfaces/leveldb.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/service.h"
 
+namespace base {
+class SequencedTaskRunner;
+}
+
 namespace leveldb {
 
 class LevelDBApp : public service_manager::Service {
@@ -34,7 +37,7 @@
   service_manager::BinderRegistry registry_;
   mojo::BindingSet<mojom::LevelDBService> bindings_;
 
-  base::Thread file_thread_;
+  scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
 
   DISALLOW_COPY_AND_ASSIGN(LevelDBApp);
 };
diff --git a/components/leveldb/leveldb_database_impl.cc b/components/leveldb/leveldb_database_impl.cc
index 02b1a2d..d8ae4e2 100644
--- a/components/leveldb/leveldb_database_impl.cc
+++ b/components/leveldb/leveldb_database_impl.cc
@@ -48,8 +48,10 @@
       cache_(std::move(cache)),
       db_(std::move(db)),
       memory_dump_id_(memory_dump_id) {
-  base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
-      this, "MojoLevelDB", base::ThreadTaskRunnerHandle::Get());
+  base::trace_event::MemoryDumpManager::GetInstance()
+      ->RegisterDumpProviderWithSequencedTaskRunner(
+          this, "MojoLevelDB", base::SequencedTaskRunnerHandle::Get(),
+          MemoryDumpProvider::Options());
 }
 
 LevelDBDatabaseImpl::~LevelDBDatabaseImpl() {
diff --git a/components/leveldb/leveldb_mojo_proxy.cc b/components/leveldb/leveldb_mojo_proxy.cc
index 791e7bb8..5c78d33 100644
--- a/components/leveldb/leveldb_mojo_proxy.cc
+++ b/components/leveldb/leveldb_mojo_proxy.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
-#include "base/single_thread_task_runner.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "mojo/public/cpp/bindings/sync_call_restrictions.h"
 
@@ -28,9 +27,9 @@
 };
 
 LevelDBMojoProxy::LevelDBMojoProxy(
-    scoped_refptr<base::SingleThreadTaskRunner> task_runner)
+    scoped_refptr<base::SequencedTaskRunner> task_runner)
     : task_runner_(std::move(task_runner)), outstanding_opaque_dirs_(0) {
-  DCHECK(!task_runner_->BelongsToCurrentThread());
+  DCHECK(!task_runner_->RunsTasksInCurrentSequence());
 }
 
 LevelDBMojoProxy::OpaqueDir* LevelDBMojoProxy::RegisterDirectory(
@@ -144,7 +143,7 @@
 }
 
 void LevelDBMojoProxy::RunInternal(const base::Closure& task) {
-  if (task_runner_->BelongsToCurrentThread()) {
+  if (task_runner_->RunsTasksInCurrentSequence()) {
     task.Run();
   } else {
     base::WaitableEvent done_event(
diff --git a/components/leveldb/leveldb_mojo_proxy.h b/components/leveldb/leveldb_mojo_proxy.h
index 2eef1a4..4b5e0ad 100644
--- a/components/leveldb/leveldb_mojo_proxy.h
+++ b/components/leveldb/leveldb_mojo_proxy.h
@@ -14,13 +14,11 @@
 #include "base/callback_forward.h"
 #include "base/files/file.h"
 #include "base/memory/ref_counted.h"
+#include "base/sequenced_task_runner.h"
+
 #include "base/synchronization/waitable_event.h"
 #include "components/filesystem/public/interfaces/directory.mojom.h"
 
-namespace base {
-class SingleThreadTaskRunner;
-}
-
 namespace leveldb {
 
 // A proxy for thread safe access to Mojo objects from multiple threads.
@@ -35,7 +33,7 @@
 class LevelDBMojoProxy : public base::RefCountedThreadSafe<LevelDBMojoProxy> {
  public:
   explicit LevelDBMojoProxy(
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner);
+      scoped_refptr<base::SequencedTaskRunner> task_runner);
 
   // A private struct to hide the underlying file that holds the lock from our
   // callers, forcing them to go through our LockFile()/UnlockFile() interface
@@ -152,9 +150,9 @@
   void UnlockFileImpl(std::unique_ptr<OpaqueLock> lock,
                       filesystem::mojom::FileError* out_error);
 
-  // The task runner which represents the thread that all mojo objects are
+  // The task runner which represents the sequence that all mojo objects are
   // bound to.
-  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+  scoped_refptr<base::SequencedTaskRunner> task_runner_;
 
   int outstanding_opaque_dirs_;
 
diff --git a/components/leveldb/leveldb_service_impl.cc b/components/leveldb/leveldb_service_impl.cc
index ba1d7f1..a26f0ba 100644
--- a/components/leveldb/leveldb_service_impl.cc
+++ b/components/leveldb/leveldb_service_impl.cc
@@ -22,7 +22,7 @@
 namespace leveldb {
 
 LevelDBServiceImpl::LevelDBServiceImpl(
-    scoped_refptr<base::SingleThreadTaskRunner> file_task_runner)
+    scoped_refptr<base::SequencedTaskRunner> file_task_runner)
     : thread_(new LevelDBMojoProxy(std::move(file_task_runner))) {}
 
 LevelDBServiceImpl::~LevelDBServiceImpl() {}
diff --git a/components/leveldb/leveldb_service_impl.h b/components/leveldb/leveldb_service_impl.h
index 364b6190..1d5fab0 100644
--- a/components/leveldb/leveldb_service_impl.h
+++ b/components/leveldb/leveldb_service_impl.h
@@ -6,11 +6,14 @@
 #define COMPONENTS_LEVELDB_LEVELDB_SERVICE_IMPL_H_
 
 #include "base/memory/ref_counted.h"
-#include "base/single_thread_task_runner.h"
 #include "components/leveldb/leveldb_mojo_proxy.h"
 #include "components/leveldb/public/interfaces/leveldb.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 
+namespace base {
+class SequencedTaskRunner;
+}
+
 namespace leveldb {
 
 // Creates LevelDBDatabases based scoped to a |directory|/|dbname|.
@@ -19,8 +22,7 @@
   // The |file_task_runner| is used to run tasks to interact with the
   // file_service. Specifically this task runner must NOT be the same as the
   // task runner this implementation runs on, or deadlock might occur.
-  LevelDBServiceImpl(
-      scoped_refptr<base::SingleThreadTaskRunner> file_task_runner);
+  LevelDBServiceImpl(scoped_refptr<base::SequencedTaskRunner> file_task_runner);
   ~LevelDBServiceImpl() override;
 
   // Overridden from LevelDBService:
diff --git a/components/metrics/file_metrics_provider.cc b/components/metrics/file_metrics_provider.cc
index e11cc53..c3745b1 100644
--- a/components/metrics/file_metrics_provider.cc
+++ b/components/metrics/file_metrics_provider.cc
@@ -17,6 +17,8 @@
 #include "base/metrics/persistent_memory_allocator.h"
 #include "base/strings/string_piece.h"
 #include "base/task_runner.h"
+#include "base/task_scheduler/post_task.h"
+#include "base/task_scheduler/task_traits.h"
 #include "base/time/time.h"
 #include "components/metrics/metrics_pref_names.h"
 #include "components/metrics/metrics_service.h"
@@ -93,6 +95,20 @@
                             base::File::FLAG_DELETE_ON_CLOSE);
 }
 
+// A task runner to use for testing.
+base::TaskRunner* g_task_runner_for_testing = nullptr;
+
+// Returns a task runner appropriate for running background tasks that perform
+// file I/O.
+scoped_refptr<base::TaskRunner> CreateBackgroundTaskRunner() {
+  if (g_task_runner_for_testing)
+    return scoped_refptr<base::TaskRunner>(g_task_runner_for_testing);
+
+  return base::CreateTaskRunnerWithTraits(
+      {base::MayBlock(), base::TaskPriority::BACKGROUND,
+       base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
+}
+
 }  // namespace
 
 // This structure stores all the information about the sources being monitored
@@ -133,10 +149,8 @@
   DISALLOW_COPY_AND_ASSIGN(SourceInfo);
 };
 
-FileMetricsProvider::FileMetricsProvider(
-    const scoped_refptr<base::TaskRunner>& task_runner,
-    PrefService* local_state)
-    : task_runner_(task_runner),
+FileMetricsProvider::FileMetricsProvider(PrefService* local_state)
+    : task_runner_(CreateBackgroundTaskRunner()),
       pref_service_(local_state),
       weak_factory_(this) {
   base::StatisticsRecorder::RegisterHistogramProvider(
@@ -149,7 +163,7 @@
                                          SourceType type,
                                          SourceAssociation source_association,
                                          const base::StringPiece prefs_key) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Ensure that kSourceOptions has been filled for this type.
   DCHECK_GT(arraysize(kSourceOptions), static_cast<size_t>(type));
@@ -198,6 +212,13 @@
 }
 
 // static
+void FileMetricsProvider::SetTaskRunnerForTesting(
+    const scoped_refptr<base::TaskRunner>& task_runner) {
+  DCHECK(!g_task_runner_for_testing);
+  g_task_runner_for_testing = task_runner.get();
+}
+
+// static
 bool FileMetricsProvider::LocateNextFileInDirectory(SourceInfo* source) {
   DCHECK_EQ(SOURCE_HISTOGRAMS_ATOMIC_DIR, source->type);
   DCHECK(!source->directory.empty());
@@ -438,7 +459,7 @@
 }
 
 void FileMetricsProvider::ScheduleSourcesCheck() {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (sources_to_check_.empty())
     return;
 
@@ -457,7 +478,7 @@
 }
 
 void FileMetricsProvider::RecordSourcesChecked(SourceInfoList* checked) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Sources that still have an allocator at this point are read/write "active"
   // files that may need their contents merged on-demand. If there is no
@@ -498,7 +519,7 @@
 }
 
 void FileMetricsProvider::RecordSourceAsRead(SourceInfo* source) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Persistently record the "last seen" timestamp of the source file to
   // ensure that the file is never read again unless it is modified again.
@@ -510,7 +531,7 @@
 }
 
 void FileMetricsProvider::OnDidCreateMetricsLog() {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Schedule a check to see if there are new metrics to load. If so, they
   // will be reported during the next collection run after this one. The
@@ -531,7 +552,7 @@
 bool FileMetricsProvider::ProvideIndependentMetrics(
     SystemProfileProto* system_profile_proto,
     base::HistogramSnapshotManager* snapshot_manager) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   while (!sources_with_profile_.empty()) {
     SourceInfo* source = sources_with_profile_.begin()->get();
@@ -584,7 +605,7 @@
 }
 
 bool FileMetricsProvider::HasInitialStabilityMetrics() {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Measure the total time spent checking all sources as well as the time
   // per individual file. This method is called during startup and thus blocks
@@ -640,7 +661,7 @@
 
 void FileMetricsProvider::RecordInitialHistogramSnapshots(
     base::HistogramSnapshotManager* snapshot_manager) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Measure the total time spent processing all sources as well as the time
   // per individual file. This method is called during startup and thus blocks
@@ -667,7 +688,7 @@
 }
 
 void FileMetricsProvider::MergeHistogramDeltas() {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // Measure the total time spent processing all sources as well as the time
   // per individual file. This method is called on the UI thread so it's
diff --git a/components/metrics/file_metrics_provider.h b/components/metrics/file_metrics_provider.h
index 6573475b..66ce266 100644
--- a/components/metrics/file_metrics_provider.h
+++ b/components/metrics/file_metrics_provider.h
@@ -14,7 +14,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/statistics_recorder.h"
-#include "base/threading/thread_checker.h"
+#include "base/sequence_checker.h"
 #include "base/time/time.h"
 #include "components/metrics/metrics_provider.h"
 
@@ -97,8 +97,7 @@
     ASSOCIATE_INTERNAL_PROFILE_OR_PREVIOUS_RUN,
   };
 
-  FileMetricsProvider(const scoped_refptr<base::TaskRunner>& task_runner,
-                      PrefService* local_state);
+  explicit FileMetricsProvider(PrefService* local_state);
   ~FileMetricsProvider() override;
 
   // Indicates a file or directory to be monitored and how the file or files
@@ -119,6 +118,10 @@
   static void RegisterPrefs(PrefRegistrySimple* prefs,
                             const base::StringPiece prefs_key);
 
+  // Sets the task runner to use for testing.
+  static void SetTaskRunnerForTesting(
+      const scoped_refptr<base::TaskRunner>& task_runner);
+
  private:
   friend class FileMetricsProviderTest;
 
@@ -225,7 +228,7 @@
   // The preferences-service used to store persistent state about sources.
   PrefService* pref_service_;
 
-  base::ThreadChecker thread_checker_;
+  SEQUENCE_CHECKER(sequence_checker_);
   base::WeakPtrFactory<FileMetricsProvider> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(FileMetricsProvider);
diff --git a/components/metrics/file_metrics_provider_unittest.cc b/components/metrics/file_metrics_provider_unittest.cc
index a62ff632..982e28c 100644
--- a/components/metrics/file_metrics_provider_unittest.cc
+++ b/components/metrics/file_metrics_provider_unittest.cc
@@ -87,6 +87,7 @@
         prefs_(new TestingPrefServiceSimple) {
     EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
     FileMetricsProvider::RegisterPrefs(prefs_->registry(), kMetricsName);
+    FileMetricsProvider::SetTaskRunnerForTesting(task_runner_);
   }
 
   ~FileMetricsProviderTest() override {
@@ -106,7 +107,7 @@
 
   FileMetricsProvider* provider() {
     if (!provider_)
-      provider_.reset(new FileMetricsProvider(task_runner_, prefs()));
+      provider_.reset(new FileMetricsProvider(prefs()));
     return provider_.get();
   }
 
diff --git a/components/offline_pages/core/background/request_coordinator.cc b/components/offline_pages/core/background/request_coordinator.cc
index 7e0882d..099a91f 100644
--- a/components/offline_pages/core/background/request_coordinator.cc
+++ b/components/offline_pages/core/background/request_coordinator.cc
@@ -205,8 +205,11 @@
   user_requested = other.user_requested;
   availability = other.availability;
   original_url = other.original_url;
+  request_origin = other.request_origin;
 }
 
+RequestCoordinator::SavePageLaterParams::~SavePageLaterParams() = default;
+
 RequestCoordinator::RequestCoordinator(
     std::unique_ptr<OfflinerPolicy> policy,
     std::unique_ptr<Offliner> offliner,
@@ -263,6 +266,7 @@
       id, save_page_later_params.url, save_page_later_params.client_id,
       base::Time::Now(), save_page_later_params.user_requested);
   request.set_original_url(save_page_later_params.original_url);
+  request.set_request_origin(save_page_later_params.request_origin);
 
   // If the download manager is not done with the request, put it on the
   // disabled list.
diff --git a/components/offline_pages/core/background/request_coordinator.h b/components/offline_pages/core/background/request_coordinator.h
index 05a1bace..9f27623 100644
--- a/components/offline_pages/core/background/request_coordinator.h
+++ b/components/offline_pages/core/background/request_coordinator.h
@@ -73,6 +73,7 @@
   struct SavePageLaterParams {
     SavePageLaterParams();
     SavePageLaterParams(const SavePageLaterParams& other);
+    ~SavePageLaterParams();
 
     // The last committed URL of the page to save.
     GURL url;
@@ -88,6 +89,9 @@
 
     // The original URL of the page to save. Empty if no redirect occurs.
     GURL original_url;
+
+    // The origin of the request, if any.
+    std::string request_origin;
   };
 
   // Callback specifying which request IDs were actually removed.
diff --git a/components/offline_pages/core/background/request_coordinator_unittest.cc b/components/offline_pages/core/background/request_coordinator_unittest.cc
index 9291c18..d16f9d5 100644
--- a/components/offline_pages/core/background/request_coordinator_unittest.cc
+++ b/components/offline_pages/core/background/request_coordinator_unittest.cc
@@ -52,6 +52,7 @@
 const bool kPowerRequired = true;
 const bool kUserRequested = true;
 const int kAttemptCount = 1;
+const std::string kRequestOrigin("abc.xyz");
 }  // namespace
 
 class ObserverStub : public RequestCoordinator::Observer {
@@ -266,6 +267,7 @@
     params.url = kUrl1;
     params.client_id = kClientId1;
     params.user_requested = kUserRequested;
+    params.request_origin = kRequestOrigin;
     return coordinator()->SavePageLater(params);
   }
 
@@ -276,6 +278,7 @@
     params.client_id = kClientId1;
     params.user_requested = kUserRequested;
     params.availability = availability;
+    params.request_origin = kRequestOrigin;
     return coordinator()->SavePageLater(params);
   }
 
@@ -564,6 +567,7 @@
   params.url = kUrl1;
   params.client_id = kClientId1;
   params.original_url = kUrl2;
+  params.request_origin = kRequestOrigin;
   EXPECT_NE(0, coordinator()->SavePageLater(params));
 
   // Expect that a request got placed on the queue.
@@ -583,6 +587,7 @@
   EXPECT_EQ(kClientId1, last_requests().at(0)->client_id());
   EXPECT_TRUE(last_requests().at(0)->user_requested());
   EXPECT_EQ(kUrl2, last_requests().at(0)->original_url());
+  EXPECT_EQ(kRequestOrigin, last_requests().at(0)->request_origin());
 
   // Expect that the scheduler got notified.
   SchedulerStub* scheduler_stub =
diff --git a/components/password_manager/core/browser/fake_form_fetcher.cc b/components/password_manager/core/browser/fake_form_fetcher.cc
index 7e7911c..fcac389 100644
--- a/components/password_manager/core/browser/fake_form_fetcher.cc
+++ b/components/password_manager/core/browser/fake_form_fetcher.cc
@@ -4,6 +4,7 @@
 
 #include "components/password_manager/core/browser/fake_form_fetcher.h"
 
+#include "base/memory/ptr_util.h"
 #include "components/autofill/core/common/password_form.h"
 #include "components/password_manager/core/browser/statistics_table.h"
 
@@ -70,7 +71,7 @@
 }
 
 std::unique_ptr<FormFetcher> FakeFormFetcher::Clone() {
-  return nullptr;
+  return base::MakeUnique<FakeFormFetcher>();
 }
 
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/fake_form_fetcher.h b/components/password_manager/core/browser/fake_form_fetcher.h
index d7c64a32..0d507c1 100644
--- a/components/password_manager/core/browser/fake_form_fetcher.h
+++ b/components/password_manager/core/browser/fake_form_fetcher.h
@@ -96,7 +96,7 @@
   // Only sets the internal state to WAITING, no call to PasswordStore.
   void Fetch() override;
 
-  // A no-op, returns null.
+  // Returns a new FakeFormFetcher.
   std::unique_ptr<FormFetcher> Clone() override;
 
  private:
diff --git a/components/password_manager/core/browser/form_fetcher.h b/components/password_manager/core/browser/form_fetcher.h
index 22bcd52..b7a862a 100644
--- a/components/password_manager/core/browser/form_fetcher.h
+++ b/components/password_manager/core/browser/form_fetcher.h
@@ -114,8 +114,7 @@
   virtual void Fetch() = 0;
 
   // Creates a copy of |*this| with contains the same credentials without the
-  // need for calling Fetch(). Only call this if GetState() returns NOT_WAITING,
-  // otherwise the original FormFetcher does not have any data to be cloned.
+  // need for calling Fetch().
   virtual std::unique_ptr<FormFetcher> Clone() = 0;
 
  private:
diff --git a/components/password_manager/core/browser/form_fetcher_impl.cc b/components/password_manager/core/browser/form_fetcher_impl.cc
index c8127b0..543580e 100644
--- a/components/password_manager/core/browser/form_fetcher_impl.cc
+++ b/components/password_manager/core/browser/form_fetcher_impl.cc
@@ -269,13 +269,17 @@
 }
 
 std::unique_ptr<FormFetcher> FormFetcherImpl::Clone() {
-  DCHECK_EQ(State::NOT_WAITING, state_);
-
   // Create the copy without the "HTTPS migration" activated. If it was needed,
   // then it was done by |this| already.
   auto result = base::MakeUnique<FormFetcherImpl>(
       form_digest_, client_, false, should_query_suppressed_forms_);
 
+  if (state_ != State::NOT_WAITING) {
+    // There are no store results to copy, trigger a Fetch on the clone instead.
+    result->Fetch();
+    return std::move(result);
+  }
+
   result->non_federated_ = MakeCopies(this->non_federated_);
   result->federated_ = MakeCopies(this->federated_);
   result->interactions_stats_ = this->interactions_stats_;
@@ -299,7 +303,6 @@
   result->state_ = this->state_;
   result->need_to_refetch_ = this->need_to_refetch_;
 
-  // TODO(crbug.com/703565): remove std::move() once Xcode 9.0+ is required.
   return std::move(result);
 }
 
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc
index a32ea407..54bcfa36 100644
--- a/components/password_manager/core/browser/password_form_manager.cc
+++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -239,8 +239,12 @@
                              true /* should_query_suppressed_https_forms */)),
       form_fetcher_(form_fetcher ? form_fetcher : owned_form_fetcher_.get()),
       is_main_frame_secure_(client->IsMainFrameSecure()) {
-  DCHECK_EQ(observed_form.scheme == PasswordForm::SCHEME_HTML,
-            driver != nullptr);
+  // Non-HTML forms should not need any interaction with the renderer, and hence
+  // no driver. Note that cloned PasswordFormManager instances can have HTML
+  // forms without drivers as well.
+  DCHECK((observed_form.scheme == PasswordForm::SCHEME_HTML) ||
+         (driver == nullptr))
+      << observed_form.scheme;
   if (driver)
     drivers_.push_back(driver);
 }
@@ -1287,6 +1291,63 @@
   form_fetcher_->AddConsumer(this);
 }
 
+std::unique_ptr<PasswordFormManager> PasswordFormManager::Clone() {
+  // Fetcher is cloned to avoid re-fetching data from PasswordStore.
+  std::unique_ptr<FormFetcher> fetcher = form_fetcher_->Clone();
+
+  // Some data is filled through the constructor. No PasswordManagerDriver is
+  // needed, because the UI does not need any functionality related to the
+  // renderer process, to which the driver serves as an interface. The full
+  // |observed_form_| needs to be copied, because it is used to created the
+  // blacklisting entry if needed.
+  auto result = base::MakeUnique<PasswordFormManager>(
+      password_manager_, client_, base::WeakPtr<PasswordManagerDriver>(),
+      observed_form_, form_saver_->Clone(), fetcher.get());
+  result->Init(metrics_recorder_);
+
+  // The constructor only can take a weak pointer to the fetcher, so moving the
+  // owning one needs to happen explicitly.
+  result->GrabFetcher(std::move(fetcher));
+
+  // |best_matches_| are skipped, because those are regenerated from the new
+  // fetcher automatically.
+
+  // These data members all satisfy:
+  //   (1) They could have been changed by |*this| between its construction and
+  //       calling Clone().
+  //   (2) They are potentially used in the clone as the clone is used in the UI
+  //       code.
+  //   (3) They are not changed during ProcessMatches, triggered at some point
+  //       by the cloned FormFetcher.
+  if (submitted_form_)
+    result->submitted_form_ = base::MakeUnique<PasswordForm>(*submitted_form_);
+  result->other_possible_username_action_ = other_possible_username_action_;
+  if (username_correction_vote_) {
+    result->username_correction_vote_ =
+        base::MakeUnique<PasswordForm>(*username_correction_vote_);
+  }
+  result->pending_credentials_ = pending_credentials_;
+  result->is_new_login_ = is_new_login_;
+  result->has_autofilled_ = has_autofilled_;
+  result->has_generated_password_ = has_generated_password_;
+  result->generated_password_changed_ = generated_password_changed_;
+  result->is_manual_generation_ = is_manual_generation_;
+  result->generation_element_ = generation_element_;
+  result->generation_popup_was_shown_ = generation_popup_was_shown_;
+  result->form_classifier_outcome_ = form_classifier_outcome_;
+  result->generation_element_detected_by_classifier_ =
+      generation_element_detected_by_classifier_;
+  result->password_overridden_ = password_overridden_;
+  result->retry_password_form_password_update_ =
+      retry_password_form_password_update_;
+  result->selected_username_ = selected_username_;
+  result->is_possible_change_password_form_without_username_ =
+      is_possible_change_password_form_without_username_;
+  result->user_action_ = user_action_;
+
+  return result;
+}
+
 void PasswordFormManager::SendVotesOnSave() {
   if (observed_form_.IsPossibleChangePasswordFormWithoutUsername())
     return;
diff --git a/components/password_manager/core/browser/password_form_manager.h b/components/password_manager/core/browser/password_form_manager.h
index 5adc2a8..32c6a5ef 100644
--- a/components/password_manager/core/browser/password_form_manager.h
+++ b/components/password_manager/core/browser/password_form_manager.h
@@ -275,6 +275,13 @@
   // adds itself as a consumer of the new one.
   void GrabFetcher(std::unique_ptr<FormFetcher> fetcher);
 
+  // Create a copy of |*this| which can be passed to the code handling
+  // save-password related UI. This omits some parts of the internal data, so
+  // the result is not identical to the original.
+  // TODO(crbug.com/739366): Replace with translating one appropriate class into
+  // another one.
+  std::unique_ptr<PasswordFormManager> Clone();
+
  protected:
   // FormFetcher::Consumer:
   void ProcessMatches(
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc
index 907a2f7..a2a4545 100644
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -97,6 +97,10 @@
                void(const autofill::PasswordForm& generated));
   MOCK_METHOD0(RemovePresavedPassword, void());
 
+  std::unique_ptr<FormSaver> Clone() override {
+    return base::MakeUnique<MockFormSaver>();
+  }
+
   // Convenience downcasting method.
   static MockFormSaver& Get(PasswordFormManager* form_manager) {
     return *static_cast<MockFormSaver*>(form_manager->form_saver());
@@ -110,6 +114,7 @@
  public:
   MOCK_METHOD1(AddConsumer, void(Consumer*));
   MOCK_METHOD1(RemoveConsumer, void(Consumer*));
+  MOCK_METHOD0(Clone, std::unique_ptr<FormFetcher>());
 };
 
 MATCHER_P(CheckUsername, username_value, "Username incorrect") {
@@ -3622,4 +3627,86 @@
       "PasswordManager.SuppressedAccount.Manual.SameOrganizationName", 1);
 }
 
+// Check that a cloned PasswordFormManager reacts correctly to Save.
+TEST_F(PasswordFormManagerTest, Clone_OnSave) {
+  FakeFormFetcher fetcher;
+  auto form_manager = base::MakeUnique<PasswordFormManager>(
+      password_manager(), client(), client()->driver(), *observed_form(),
+      base::MakeUnique<MockFormSaver>(), &fetcher);
+  form_manager->Init(nullptr);
+  fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
+
+  PasswordForm saved_login = *observed_form();
+  saved_login.username_value = ASCIIToUTF16("newuser");
+  saved_login.password_value = ASCIIToUTF16("newpass");
+  form_manager->ProvisionallySave(
+      saved_login, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
+
+  const PasswordForm pending = form_manager->pending_credentials();
+
+  std::unique_ptr<PasswordFormManager> clone = form_manager->Clone();
+
+  PasswordForm passed;
+  EXPECT_CALL(MockFormSaver::Get(clone.get()), Save(_, IsEmpty(), nullptr))
+      .WillOnce(SaveArg<0>(&passed));
+  clone->Save();
+  // The date is expected to be different. Reset it so that we can easily
+  // compare the rest with operator==.
+  passed.date_created = pending.date_created;
+  EXPECT_EQ(pending, passed);
+}
+
+// Check that a cloned PasswordFormManager reacts correctly to OnNeverClicked.
+TEST_F(PasswordFormManagerTest, Clone_OnNeverClicked) {
+  FakeFormFetcher fetcher;
+  auto form_manager = base::MakeUnique<PasswordFormManager>(
+      password_manager(), client(), client()->driver(), *observed_form(),
+      base::MakeUnique<MockFormSaver>(), &fetcher);
+  form_manager->Init(nullptr);
+  fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
+
+  PasswordForm saved_login = *observed_form();
+  saved_login.username_value = ASCIIToUTF16("newuser");
+  saved_login.password_value = ASCIIToUTF16("newpass");
+  form_manager->ProvisionallySave(
+      saved_login, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
+
+  std::unique_ptr<PasswordFormManager> clone = form_manager->Clone();
+
+  EXPECT_CALL(MockFormSaver::Get(clone.get()),
+              PermanentlyBlacklist(Pointee(*observed_form())));
+  clone->OnNeverClicked();
+}
+
+// Check that a cloned PasswordFormManager works even after the original is
+// gone.
+TEST_F(PasswordFormManagerTest, Clone_SurvivesOriginal) {
+  FakeFormFetcher fetcher;
+  auto form_manager = base::MakeUnique<PasswordFormManager>(
+      password_manager(), client(), client()->driver(), *observed_form(),
+      base::MakeUnique<MockFormSaver>(), &fetcher);
+  fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
+  form_manager->Init(nullptr);
+
+  PasswordForm saved_login = *observed_form();
+  saved_login.username_value = ASCIIToUTF16("newuser");
+  saved_login.password_value = ASCIIToUTF16("newpass");
+  form_manager->ProvisionallySave(
+      saved_login, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
+
+  const PasswordForm pending = form_manager->pending_credentials();
+
+  std::unique_ptr<PasswordFormManager> clone = form_manager->Clone();
+  form_manager.reset();
+
+  PasswordForm passed;
+  EXPECT_CALL(MockFormSaver::Get(clone.get()), Save(_, IsEmpty(), nullptr))
+      .WillOnce(SaveArg<0>(&passed));
+  clone->Save();
+  // The date is expected to be different. Reset it so that we can easily
+  // compare the rest with operator==.
+  passed.date_created = pending.date_created;
+  EXPECT_EQ(pending, passed);
+}
+
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
index c782635..d89ec30 100644
--- a/components/password_manager/core/browser/password_manager.cc
+++ b/components/password_manager/core/browser/password_manager.cc
@@ -355,11 +355,7 @@
     return;
   }
 
-  std::unique_ptr<PasswordFormManager> manager;
-  // Transfer ownership of the manager from |pending_login_managers_| to
-  // |manager|.
-  manager.swap(*matched_manager_it);
-  pending_login_managers_.erase(matched_manager_it);
+  std::unique_ptr<PasswordFormManager> manager = (*matched_manager_it)->Clone();
 
   PasswordForm submitted_form(form);
   submitted_form.preferred = true;
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index 6999bc91..12c762a4 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -605,11 +605,12 @@
   // |observed_form| and not the |stored_form| what is passed to ShouldSave.
   observed_form.username_element += ASCIIToUTF16("1");
   observed.push_back(observed_form);
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
   // Simulate that |form| is already in the store, making this an update.
   EXPECT_CALL(*store_, GetLogins(_, _))
       .WillRepeatedly(WithArg<1>(InvokeConsumer(stored_form)));
+  EXPECT_CALL(driver_, FillPasswordForm(_));
   manager()->OnPasswordFormsParsed(&driver_, observed);
+  EXPECT_CALL(driver_, FillPasswordForm(_));
   manager()->OnPasswordFormsRendered(&driver_, observed, true);
 
   // Submit form and finish navigation.
@@ -629,6 +630,9 @@
   EXPECT_CALL(*store_, UpdateLogin(_));
   observed.clear();
   manager()->OnPasswordFormsParsed(&driver_, observed);
+  // As the clone PasswordFormManager ends up saving the form, it triggers an
+  // update of the pending login managers, which in turn triggers new filling.
+  EXPECT_CALL(driver_, FillPasswordForm(_));
   manager()->OnPasswordFormsRendered(&driver_, observed, true);
 }
 
@@ -968,10 +972,13 @@
       .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save)));
 
   manager()->OnInPageNavigation(&driver_, form);
+  ASSERT_TRUE(form_manager_to_save);
 
   // Simulate saving the form, as if the info bar was accepted.
   EXPECT_CALL(*store_, AddLogin(FormMatches(form)));
-  ASSERT_TRUE(form_manager_to_save);
+  // The Save() call triggers updating for |pending_login_managers_|, hence the
+  // further GetLogins call.
+  EXPECT_CALL(*store_, GetLogins(_, _));
   form_manager_to_save->Save();
 }
 
@@ -1189,24 +1196,26 @@
   PasswordForm form(MakeSimpleForm());
   observed.push_back(form);
 
-  // No call-back from store after GetLogins is called emulates that
-  // PasswordStore did not fetch a form in time before submission.
+  // GetLogins calls remain unanswered to emulate that PasswordStore did not
+  // fetch a form in time before submission.
   EXPECT_CALL(*store_, GetLogins(_, _));
   manager()->OnPasswordFormsParsed(&driver_, observed);
   manager()->OnPasswordFormsRendered(&driver_, observed, true);
   ASSERT_EQ(1u, manager()->pending_login_managers().size());
-  PasswordFormManager* form_manager =
-      manager()->pending_login_managers().front().get();
+  PasswordStoreConsumer* store_consumer = nullptr;
 
   EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
       .WillRepeatedly(Return(true));
+  // This second call is from the new FormFetcher, which is cloned during
+  // ProvisionalSavePasswords.
+  EXPECT_CALL(*store_, GetLogins(_, _)).WillOnce(SaveArg<1>(&store_consumer));
   OnPasswordFormSubmitted(form);
 
   // Emulate fetching password form from PasswordStore after submission but
   // before post-navigation load.
-  ASSERT_TRUE(form_manager);
-  static_cast<FormFetcherImpl*>(form_manager->form_fetcher())
-      ->OnGetPasswordStoreResults(std::vector<std::unique_ptr<PasswordForm>>());
+  ASSERT_TRUE(store_consumer);
+  store_consumer->OnGetPasswordStoreResults(
+      std::vector<std::unique_ptr<PasswordForm>>());
 
   std::unique_ptr<PasswordFormManager> form_manager_to_save;
   EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_))
diff --git a/components/payments/core/BUILD.gn b/components/payments/core/BUILD.gn
index 4b9d266..63fc2911 100644
--- a/components/payments/core/BUILD.gn
+++ b/components/payments/core/BUILD.gn
@@ -17,6 +17,8 @@
     "can_make_payment_query.h",
     "currency_formatter.cc",
     "currency_formatter.h",
+    "features.cc",
+    "features.h",
     "journey_logger.cc",
     "journey_logger.h",
     "payment_address.cc",
diff --git a/components/payments/core/features.cc b/components/payments/core/features.cc
new file mode 100644
index 0000000..183396d
--- /dev/null
+++ b/components/payments/core/features.cc
@@ -0,0 +1,16 @@
+// 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 "components/payments/core/features.h"
+
+namespace payments {
+namespace features {
+
+#if defined(OS_IOS)
+const base::Feature kWebPayments{"WebPayments",
+                                 base::FEATURE_DISABLED_BY_DEFAULT};
+#endif
+
+}  // namespace features
+}  // namespace payments
diff --git a/components/payments/core/features.h b/components/payments/core/features.h
new file mode 100644
index 0000000..ba5d702
--- /dev/null
+++ b/components/payments/core/features.h
@@ -0,0 +1,22 @@
+// 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 COMPONENTS_PAYMENTS_CORE_FEATURES_H_
+#define COMPONENTS_PAYMENTS_CORE_FEATURES_H_
+
+#include "base/feature_list.h"
+#include "build/build_config.h"
+
+namespace payments {
+namespace features {
+
+#if defined(OS_IOS)
+// Used to control the state of the Payment Request API feature.
+extern const base::Feature kWebPayments;
+#endif
+
+}  // namespace features
+}  // namespace payments
+
+#endif  // COMPONENTS_PAYMENTS_CORE_FEATURES_H_
diff --git a/components/proximity_auth/unlock_manager_impl.cc b/components/proximity_auth/unlock_manager_impl.cc
index 92afbace..c2af9d1c 100644
--- a/components/proximity_auth/unlock_manager_impl.cc
+++ b/components/proximity_auth/unlock_manager_impl.cc
@@ -247,9 +247,6 @@
 void UnlockManagerImpl::OnFocusedUserChanged(const AccountId& account_id) {}
 
 void UnlockManagerImpl::OnScreenLockedOrUnlocked(bool is_locked) {
-  // TODO(tengs): Chrome will only start connecting to the phone when
-  // the screen is locked, for privacy reasons. We should reinvestigate
-  // this behaviour if we want automatic locking.
   if (is_locked && bluetooth_adapter_ && bluetooth_adapter_->IsPowered() &&
       life_cycle_ &&
       life_cycle_->GetState() ==
@@ -351,8 +348,11 @@
 }
 
 ScreenlockState UnlockManagerImpl::GetScreenlockState() {
-  if (!life_cycle_ ||
-      life_cycle_->GetState() == RemoteDeviceLifeCycle::State::STOPPED)
+  if (!life_cycle_)
+    return ScreenlockState::INACTIVE;
+
+  RemoteDeviceLifeCycle::State life_cycle_state = life_cycle_->GetState();
+  if (life_cycle_state == RemoteDeviceLifeCycle::State::STOPPED)
     return ScreenlockState::INACTIVE;
 
   if (!bluetooth_adapter_ || !bluetooth_adapter_->IsPowered())
@@ -361,17 +361,19 @@
   if (IsUnlockAllowed())
     return ScreenlockState::AUTHENTICATED;
 
-  if (life_cycle_->GetState() ==
-      RemoteDeviceLifeCycle::State::AUTHENTICATION_FAILED)
+  if (life_cycle_state == RemoteDeviceLifeCycle::State::AUTHENTICATION_FAILED)
     return ScreenlockState::PHONE_NOT_AUTHENTICATED;
 
-  if (is_waking_up_ ||
-      life_cycle_->GetState() == RemoteDeviceLifeCycle::State::AUTHENTICATING ||
-      life_cycle_->GetState() ==
-          RemoteDeviceLifeCycle::State::FINDING_CONNECTION)
+  if (is_waking_up_)
     return ScreenlockState::BLUETOOTH_CONNECTING;
 
   Messenger* messenger = GetMessenger();
+
+  // Show a timeout state if we can not connect to the remote device in a
+  // reasonable amount of time.
+  if (!is_waking_up_ && !messenger)
+    return ScreenlockState::NO_PHONE;
+
   if (screenlock_type_ == ProximityAuthSystem::SIGN_IN && messenger &&
       !messenger->SupportsSignIn())
     return ScreenlockState::PHONE_UNSUPPORTED;
diff --git a/components/proximity_auth/unlock_manager_impl_unittest.cc b/components/proximity_auth/unlock_manager_impl_unittest.cc
index 9dc836f..e9131f5 100644
--- a/components/proximity_auth/unlock_manager_impl_unittest.cc
+++ b/components/proximity_auth/unlock_manager_impl_unittest.cc
@@ -312,6 +312,8 @@
        IsUnlockAllowed_SecureChannelNotEstablished) {
   CreateUnlockManager(ProximityAuthSystem::SESSION_LOCK);
 
+  life_cycle_.set_connection(nullptr);
+  life_cycle_.set_messenger(nullptr);
   unlock_manager_->SetRemoteDeviceLifeCycle(&life_cycle_);
   life_cycle_.ChangeState(RemoteDeviceLifeCycle::State::AUTHENTICATING);
   unlock_manager_->OnLifeCycleStateChanged();
@@ -427,6 +429,24 @@
 }
 
 TEST_F(ProximityAuthUnlockManagerImplTest,
+       SetRemoteDeviceLifeCycle_TimesOutBeforeConnection) {
+  CreateUnlockManager(ProximityAuthSystem::SESSION_LOCK);
+
+  life_cycle_.set_connection(nullptr);
+  life_cycle_.set_messenger(nullptr);
+  life_cycle_.ChangeState(RemoteDeviceLifeCycle::State::FINDING_CONNECTION);
+
+  EXPECT_CALL(proximity_auth_client_,
+              UpdateScreenlockState(ScreenlockState::BLUETOOTH_CONNECTING));
+  unlock_manager_->SetRemoteDeviceLifeCycle(&life_cycle_);
+
+  EXPECT_CALL(proximity_auth_client_,
+              UpdateScreenlockState(ScreenlockState::NO_PHONE));
+  // Simulate timing out before a connection is established.
+  RunPendingTasks();
+}
+
+TEST_F(ProximityAuthUnlockManagerImplTest,
        SetRemoteDeviceLifeCycle_NullRemoteDeviceLifeCycle_NoProximityMonitor) {
   CreateUnlockManager(ProximityAuthSystem::SESSION_LOCK);
   SimulateUserPresentState();
@@ -593,15 +613,15 @@
 
 TEST_F(ProximityAuthUnlockManagerImplTest, OnScreenDidLock_SetsWakingUpState) {
   CreateUnlockManager(ProximityAuthSystem::SESSION_LOCK);
-  SimulateUserPresentState();
-
-  unlock_manager_.get()->OnScreenDidUnlock(
-      ScreenlockBridge::LockHandler::LOCK_SCREEN);
 
   EXPECT_CALL(proximity_auth_client_,
               UpdateScreenlockState(ScreenlockState::BLUETOOTH_CONNECTING));
 
   life_cycle_.ChangeState(RemoteDeviceLifeCycle::State::FINDING_CONNECTION);
+  unlock_manager_->SetRemoteDeviceLifeCycle(&life_cycle_);
+  unlock_manager_.get()->OnScreenDidLock(
+      ScreenlockBridge::LockHandler::LOCK_SCREEN);
+
   unlock_manager_->OnLifeCycleStateChanged();
 }
 
diff --git a/components/safe_browsing/triggers/BUILD.gn b/components/safe_browsing/triggers/BUILD.gn
index 55f53f1..96b53efa 100644
--- a/components/safe_browsing/triggers/BUILD.gn
+++ b/components/safe_browsing/triggers/BUILD.gn
@@ -15,6 +15,7 @@
     "//content/public/browser:browser",
   ]
   deps = [
+    ":trigger_throttler",
     "//base:base",
     "//components/prefs:prefs",
     "//components/safe_browsing:safe_browsing",
@@ -22,12 +23,24 @@
   ]
 }
 
+source_set("trigger_throttler") {
+  sources = [
+    "trigger_throttler.cc",
+    "trigger_throttler.h",
+  ]
+  deps = [
+    "//base:base",
+  ]
+}
+
 source_set("unit_tests") {
   testonly = true
   sources = [
     "trigger_manager_unittest.cc",
+    "trigger_throttler_unittest.cc",
   ]
   deps = [
+    ":trigger_throttler",
     ":triggers",
     "//base",
     "//chrome/test:test_support",
diff --git a/components/safe_browsing/triggers/trigger_manager.cc b/components/safe_browsing/triggers/trigger_manager.cc
index 6899ff15..eeec916 100644
--- a/components/safe_browsing/triggers/trigger_manager.cc
+++ b/components/safe_browsing/triggers/trigger_manager.cc
@@ -17,13 +17,17 @@
 
 namespace {
 
-bool CanStartDataCollection(const SBErrorOptions& error_display_options) {
+bool CanStartDataCollection(const SBErrorOptions& error_display_options,
+                            const TriggerThrottler& throttler,
+                            const TriggerType trigger_type) {
   // We start data collection as long as user is not incognito and is able to
-  // change the Extended Reporting opt-in. We don't require them to be opted-in
-  // to SBER to begin collecting data, since they may be able to change the
-  // setting while data collection is running (eg: on a security interstitial).
+  // change the Extended Reporting opt-in, and the |trigger_type| has available
+  // quota. We don't require users to be opted-in to SBER to begin collecting
+  // data, since they may be able to change the setting while data collection is
+  // running (eg: on a security interstitial).
   return !error_display_options.is_off_the_record &&
-         error_display_options.is_extended_reporting_opt_in_allowed;
+         error_display_options.is_extended_reporting_opt_in_allowed &&
+         throttler.TriggerCanFire(trigger_type);
 }
 
 bool CanSendReport(const SBErrorOptions& error_display_options) {
@@ -59,7 +63,7 @@
 }
 
 bool TriggerManager::StartCollectingThreatDetails(
-    const SafeBrowsingTriggerType trigger_type,
+    const TriggerType trigger_type,
     content::WebContents* web_contents,
     const security_interstitials::UnsafeResource& resource,
     net::URLRequestContextGetter* request_context_getter,
@@ -67,7 +71,8 @@
     const SBErrorOptions& error_display_options) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
-  if (!CanStartDataCollection(error_display_options))
+  if (!CanStartDataCollection(error_display_options, trigger_throttler_,
+                              trigger_type))
     return false;
 
   // Ensure we're not already collecting data on this tab.
@@ -85,7 +90,7 @@
 }
 
 bool TriggerManager::FinishCollectingThreatDetails(
-    const SafeBrowsingTriggerType trigger_type,
+    const TriggerType trigger_type,
     content::WebContents* web_contents,
     const base::TimeDelta& delay,
     bool did_proceed,
@@ -115,6 +120,9 @@
         base::BindOnce(&ThreatDetails::FinishCollection, threat_details,
                        did_proceed, num_visits),
         delay);
+
+    // Record that this trigger fired and collected data.
+    trigger_throttler_.TriggerFired(trigger_type);
   }
 
   // Regardless of whether the report got sent, clean up the data collector on
diff --git a/components/safe_browsing/triggers/trigger_manager.h b/components/safe_browsing/triggers/trigger_manager.h
index f78ce60..fcc0df6 100644
--- a/components/safe_browsing/triggers/trigger_manager.h
+++ b/components/safe_browsing/triggers/trigger_manager.h
@@ -9,6 +9,7 @@
 
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
+#include "components/safe_browsing/triggers/trigger_throttler.h"
 #include "components/security_interstitials/content/unsafe_resource.h"
 #include "components/security_interstitials/core/base_safe_browsing_error_ui.h"
 #include "content/public/browser/web_contents.h"
@@ -28,10 +29,6 @@
 class BaseUIManager;
 class ThreatDetails;
 
-enum class SafeBrowsingTriggerType {
-  SECURITY_INTERSTITIAL,
-};
-
 // A wrapper around different kinds of data collectors that can be active on a
 // given browser tab. Any given field can be null or empty if the associated
 // data is not being collected.
@@ -86,7 +83,7 @@
   // should be created by TriggerManager::GetSBErrorDisplayOptions().
   // Returns true if the collection began, or false if it didn't.
   bool StartCollectingThreatDetails(
-      const SafeBrowsingTriggerType trigger_type,
+      const TriggerType trigger_type,
       content::WebContents* web_contents,
       const security_interstitials::UnsafeResource& resource,
       net::URLRequestContextGetter* request_context_getter,
@@ -104,7 +101,7 @@
   // Returns true if the report was completed and sent, or false otherwise (eg:
   // the user was not opted-in to extended reporting after collection began).
   bool FinishCollectingThreatDetails(
-      const SafeBrowsingTriggerType trigger_type,
+      const TriggerType trigger_type,
       content::WebContents* web_contents,
       const base::TimeDelta& delay,
       bool did_proceed,
@@ -121,6 +118,9 @@
   // Map of the data collectors running on each tabs.
   DataCollectorsMap data_collectors_map_;
 
+  // Keeps track of how often triggers fire and throttles them when needed.
+  TriggerThrottler trigger_throttler_;
+
   DISALLOW_COPY_AND_ASSIGN(TriggerManager);
 };
 
diff --git a/components/safe_browsing/triggers/trigger_manager_unittest.cc b/components/safe_browsing/triggers/trigger_manager_unittest.cc
index 7261abdab..662f446a 100644
--- a/components/safe_browsing/triggers/trigger_manager_unittest.cc
+++ b/components/safe_browsing/triggers/trigger_manager_unittest.cc
@@ -82,7 +82,7 @@
     SBErrorOptions options =
         TriggerManager::GetSBErrorDisplayOptions(pref_service_, *web_contents);
     return trigger_manager_.StartCollectingThreatDetails(
-        SafeBrowsingTriggerType::SECURITY_INTERSTITIAL, web_contents,
+        TriggerType::SECURITY_INTERSTITIAL, web_contents,
         security_interstitials::UnsafeResource(), nullptr, nullptr, options);
   }
 
@@ -97,8 +97,8 @@
     SBErrorOptions options =
         TriggerManager::GetSBErrorDisplayOptions(pref_service_, *web_contents);
     return trigger_manager_.FinishCollectingThreatDetails(
-        SafeBrowsingTriggerType::SECURITY_INTERSTITIAL, web_contents,
-        base::TimeDelta(), false, 0, options);
+        TriggerType::SECURITY_INTERSTITIAL, web_contents, base::TimeDelta(),
+        false, 0, options);
   }
 
   const DataCollectorsMap& data_collectors_map() {
diff --git a/components/safe_browsing/triggers/trigger_throttler.cc b/components/safe_browsing/triggers/trigger_throttler.cc
new file mode 100644
index 0000000..cb00346
--- /dev/null
+++ b/components/safe_browsing/triggers/trigger_throttler.cc
@@ -0,0 +1,101 @@
+// Copyright (c) 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 "components/safe_browsing/triggers/trigger_throttler.h"
+
+#include "base/stl_util.h"
+#include "base/time/time.h"
+
+namespace safe_browsing {
+
+namespace {
+const size_t kUnlimitedTriggerQuota = std::numeric_limits<size_t>::max();
+constexpr base::TimeDelta kOneDayTimeDelta = base::TimeDelta::FromDays(1);
+
+size_t GetDailyQuotaForTrigger(const TriggerType trigger_type) {
+  switch (trigger_type) {
+    case TriggerType::SECURITY_INTERSTITIAL:
+      return kUnlimitedTriggerQuota;
+  }
+  // By default, unhandled trigger types have no quota.
+  return 0;
+}
+
+}  // namespace
+
+TriggerThrottler::TriggerThrottler() {}
+
+TriggerThrottler::~TriggerThrottler() {}
+
+bool TriggerThrottler::TriggerCanFire(const TriggerType trigger_type) const {
+  // Lookup how many times this trigger is allowed to fire each day.
+  const size_t trigger_quota = GetDailyQuotaForTrigger(trigger_type);
+
+  // Some basic corner cases for triggers that always fire, or disabled
+  // triggers that never fire.
+  if (trigger_quota == kUnlimitedTriggerQuota)
+    return true;
+  if (trigger_quota == 0)
+    return false;
+
+  // Other triggers are capped, see how many times this trigger has already
+  // fired.
+  if (!base::ContainsKey(trigger_events_, trigger_type))
+    return true;
+
+  const std::vector<time_t>& timestamps = trigger_events_.at(trigger_type);
+  // More quota is available, so the trigger can fire again.
+  if (trigger_quota > timestamps.size())
+    return true;
+
+  // Otherwise, we have more events than quota, check which day they occured on.
+  // Newest events are at the end of vector so we can simply look at the
+  // Nth-from-last entry (where N is the quota) to see if it happened within
+  // the current day or earlier.
+  base::Time min_timestamp = base::Time::Now() - kOneDayTimeDelta;
+  const size_t pos = timestamps.size() - trigger_quota + 1;
+  return timestamps[pos] < min_timestamp.ToTimeT();
+}
+
+void TriggerThrottler::TriggerFired(const TriggerType trigger_type) {
+  // Lookup how many times this trigger is allowed to fire each day.
+  const size_t trigger_quota = GetDailyQuotaForTrigger(trigger_type);
+
+  // For triggers that always fire, don't bother tracking quota.
+  if (trigger_quota == kUnlimitedTriggerQuota)
+    return;
+
+  // Otherwise, record that the trigger fired.
+  std::vector<time_t>* timestamps = &trigger_events_[trigger_type];
+  timestamps->push_back(base::Time::Now().ToTimeT());
+
+  // Clean up the trigger events map.
+  CleanupOldEvents();
+}
+
+void TriggerThrottler::CleanupOldEvents() {
+  for (const auto& map_iter : trigger_events_) {
+    const TriggerType trigger_type = map_iter.first;
+    const size_t trigger_quota = GetDailyQuotaForTrigger(trigger_type);
+    const std::vector<time_t>& trigger_times = map_iter.second;
+
+    // Skip the cleanup if we have quota room, quotas should generally be small.
+    if (trigger_times.size() < trigger_quota)
+      return;
+
+    std::vector<time_t> tmp_trigger_times;
+    base::Time min_timestamp = base::Time::Now() - kOneDayTimeDelta;
+    // Go over the event times for this trigger and keep timestamps which are
+    // newer than |min_timestamp|. We put timestamps in a temp vector that will
+    // get swapped into the map in place of the existing vector.
+    for (const time_t timestamp : trigger_times) {
+      if (timestamp > min_timestamp.ToTimeT())
+        tmp_trigger_times.push_back(timestamp);
+    }
+
+    trigger_events_[trigger_type].swap(tmp_trigger_times);
+  }
+}
+
+}  // namespace safe_browsing
diff --git a/components/safe_browsing/triggers/trigger_throttler.h b/components/safe_browsing/triggers/trigger_throttler.h
new file mode 100644
index 0000000..33b588a
--- /dev/null
+++ b/components/safe_browsing/triggers/trigger_throttler.h
@@ -0,0 +1,58 @@
+// Copyright (c) 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 COMPONENTS_SAFE_BROWSING_TRIGGERS_TRIGGER_THROTTLER_H_
+#define COMPONENTS_SAFE_BROWSING_TRIGGERS_TRIGGER_THROTTLER_H_
+
+#include <unordered_map>
+#include <vector>
+
+#include "base/macros.h"
+#include "base/time/time.h"
+
+namespace safe_browsing {
+
+enum class TriggerType {
+  SECURITY_INTERSTITIAL = 1,
+};
+
+struct TriggerTypeHash {
+  std::size_t operator()(TriggerType trigger_type) const {
+    return static_cast<std::size_t>(trigger_type);
+  };
+};
+
+// A map for storing a list of event timestamps for different trigger types.
+using TriggerTimestampMap =
+    std::unordered_map<TriggerType, std::vector<time_t>, TriggerTypeHash>;
+
+// TriggerThrottler keeps track of how often each type of trigger gets fired
+// and throttles them if they fire too often.
+class TriggerThrottler {
+ public:
+  TriggerThrottler();
+  virtual ~TriggerThrottler();
+
+  // Check if the the specified |trigger_type| has quota available and is
+  // allowed to fire at this time.
+  bool TriggerCanFire(const TriggerType trigger_type) const;
+
+  // Called to notify the throttler that a trigger has just fired and quota
+  // should be updated.
+  void TriggerFired(const TriggerType trigger_type);
+
+ private:
+  // Called to periodically clean-up the list of event timestamps.
+  void CleanupOldEvents();
+
+  // Stores each trigger type that fired along with the timestamps of when it
+  // fired.
+  TriggerTimestampMap trigger_events_;
+
+  DISALLOW_COPY_AND_ASSIGN(TriggerThrottler);
+};
+
+}  // namespace safe_browsing
+
+#endif  // COMPONENTS_SAFE_BROWSING_TRIGGERS_TRIGGER_THROTTLER_H_
diff --git a/components/safe_browsing/triggers/trigger_throttler_unittest.cc b/components/safe_browsing/triggers/trigger_throttler_unittest.cc
new file mode 100644
index 0000000..1b01e72
--- /dev/null
+++ b/components/safe_browsing/triggers/trigger_throttler_unittest.cc
@@ -0,0 +1,22 @@
+// Copyright (c) 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 "components/safe_browsing/triggers/trigger_throttler.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace safe_browsing {
+namespace {
+
+TEST(TriggerThrottler, SecurityInterstitialsHaveUnlimitedQuota) {
+  // Make sure that security interstitials never run out of quota.
+  TriggerThrottler throttler;
+  for (int i = 0; i < 1000; ++i) {
+    throttler.TriggerFired(TriggerType::SECURITY_INTERSTITIAL);
+    EXPECT_TRUE(throttler.TriggerCanFire(TriggerType::SECURITY_INTERSTITIAL));
+  }
+}
+
+}  // namespace
+}  // namespace safe_browsing
diff --git a/components/search_engines/template_url_fetcher.h b/components/search_engines/template_url_fetcher.h
index c2c05ed..896c755 100644
--- a/components/search_engines/template_url_fetcher.h
+++ b/components/search_engines/template_url_fetcher.h
@@ -6,11 +6,11 @@
 #define COMPONENTS_SEARCH_ENGINES_TEMPLATE_URL_FETCHER_H_
 
 #include <memory>
+#include <vector>
 
 #include "base/callback_forward.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_vector.h"
 #include "base/strings/string16.h"
 #include "components/keyed_service/core/keyed_service.h"
 
diff --git a/components/test/data/cast_channel/self_signed.pem b/components/test/data/cast_channel/self_signed.pem
new file mode 100644
index 0000000..e1e598f
--- /dev/null
+++ b/components/test/data/cast_channel/self_signed.pem
@@ -0,0 +1,172 @@
+-----BEGIN PRIVATE KEY-----
+MIIJQQIBADANBgkqhkiG9w0BAQEFAASCCSswggknAgEAAoICAQCvmgb1o92O4ckf
+E79MEQZEN2ZZuzEPeRsvG4aPxZO/UHasKfLY4lk2voDmF7ZeD7GKa/xidVXl+xbV
+ZhKckzG5LYwpnMc3Deeq7IW+iLEIPsPDkE7tNRKchmO8QkOhKiI4cq/JMiFPxYyj
+T9HVRIJ2u+/WYWjJr7oy4eM+EmqHymJknhPl7PzTVC6fjglwh+t0EG35K7V829nj
+zhe0/hPMgaLfTFAyR97RdPOMKwRujD5F0733173PYHy3ahac10rp+r5kMu3/ULOV
+BQ6uQWjWQg69isdimNgH/dKW2Pj5UntfunCUmfH3nXHJUCiXZKdHGr3qqLnHdTeq
+QH0nrcm4o2BQj2no8Mh3Sw7wYn9a7+Hsgj6CvNC5pkDo2mp2aUmwi82cPRkKidyu
+RO6amM5NeQj3tVBtx7LrwcYSMQSLEgmdkz3JnYFj47+Je0twI7ONtqbxi72EKvsr
++ZN98XCX3RCjSsl4sDHqo/tDv2+eLb0QGEThE89j7YwiryegEGOGzrf9/D3P6bi4
+TQHmP3116zKaUvMixwhzxXg1+L1LcRQChHqhp/rb8GIA6Bd0ybzuZHkZm4srdK+x
+4W2emMjgY3hHoBegRsJCyyvEF4oCM9NH4SvExs+gk537F7Q02CAGaMUlYvEqeGUe
+Y0SQDGUvQ6CbuUMeRKucXRqQ0talvQIDAQABAoICACXw0bAhR62nex0L1zlINGJo
+1eRtXZxKPmVfPSOzPMkJSZrJNX9G6J+7aX5NgUmxelq+GjnrwDOAnN5ev4a1BvlL
+rg0Portydauojv0r65Qse3+1nlgCL5NCNipm5tXblKk9nl2KR0hFFq3ygRPjSYz9
+7kQTp+Br53827zJqKDpOsBOtU/9JxRakCa7PsZpuw6DALAK6PuxLVDi0PssMWprF
+J7u3cVxryujWrAiNAtgf1RShO1phctFrt4aplVkt6zHCy4A6wNF5TlPUU+eymkQw
+4Z5ybcIP5B1V6jpNhv3XpHB6h/iTioRFsGAewaZ0SPBEBuS8r+c4nF5csK3yDrNK
+d3Yf7tA6AjuHxnd9KFn7UT6KZ6FdWGtqMqRWQeaRp6PKgzuFgTVHWlDWjdIoDoRo
+Abp7zQJL3nrdXb8D1mZV7S3ulWbMUHlXjDs8z90rBd0f0XLOnR+CgmS349Wp/b7P
+rnN6XyU2i+LBSSuWXRHl+L7dH5DNg9Rl0jxSBmsRrUZgWpwQzuTs7w5NoO1c8arp
+ov6hsOc8kp2fzIPiKOyRFZ35KmeJK5YvV/iSYLYJ3oV9Lxp/Y1aO0q50nRtK7cPr
+Pxv87NrDhhN3bt2iu6Y+RoSYaO1J5kt2v587RyzCdQlRwXVIU6OlPY25VBgdrXmV
+2NAmRmeh4L20lr4ES+IBAoIBAQDXXzqmL3WrluydsA3n5wM0kYpsbyl8FdtC9GLq
+/jchM0GE25ij6/9IUY3Lc7ajGI1eG1yUF0t4n0PeTJz6/ouGTNaX65gzPCdJvmO9
+rJiWzwDjdcNaZQBHc5My8fxZ37fIizY8JzorbfzcsB4F0e/urB/cn4cckur5m8Dy
+gIzFDRkw88s0gxiYh+nm87p3qHaRIU8giaaN1gOU8UjMy7k0/CHr5GduEsBCC5jZ
+1v57ipPQf+9nU3HtcBXZFeAgkU2zCcIBRzpYTkRi3Fu57LeSg+3ciuoZ8QRQ0gvQ
+rNnc81Y1vlTpN1rifqnZpjZkh6Y0fQkYfdfhK9DtUje2FUFVAoIBAQDQujRwg+u8
+CYXeOGz4t75ayR4vu3c/G1M0LwtqP3fp0ceA43ESb/VoBeqnyWnIkoYiVpB4vDSp
+UEejZB4dDHeoT6eHQ+v12q9Lg0Q9Rm+B2Ir8lTgG0zKcoA2+FmnpXc4xNT4JYSq+
+40plBFV2WY3LKuKICle0VQaEvbi6lAlQGrGi9JIICZT4UGwbul/jCl6a5p9J2dkf
+kEPjZixBaDFwaS2QC/Iia3JDV7WuVktNiSUkO9ioiqLtMTIHjiCssxw3dselBJ3A
+u+T/Q77TwZOihoyor8sA+yaVU336Qe5VGop41YMQj6ajeVk44W8Hgt0s49Nwok/I
+4UjhrD4C1PLJAoIBACFQ7+epS9ChZjT2eRA4ojxNj1Y60/YIA4UV/P9RGAIgxa/h
+sHkbFsB/LSod2lDciXHXVbjq6ZfdO0h2HYqOOdMqq7+QiFjUo1c7Bn7e5jPeDcsh
++nhPS33CGTE2Uc0tWGbDcj5X6x2ww/73l41a7nzDT6J3YxU+fO7j8zMQQ7Zv0kfK
+TtLuvK1LyRka9utvufe1aWIlKQij5KXztUlI8nuJzU2KZZ2XdPpChQCdy3wc8cS9
+JbGcLPGH9zk/sw4WrChYCBTeid4DLX0FjYLzZWpa0j7dll0w9XPzKjS7qHAPjHR/
+3u68y2hiI7AxkBR5D3LrLK8HOI/ykT1FDK00GIkCggEARMLy/5YWFM42UazZCV7O
+0O2siiEB+cIwuOI+qnPaNycqyCUlXOORPwGj+j56IN9UXP+TfJLT7mtKDmOvH/a5
+fLMxB3iyxT2TvhayZlVL6sTBlNA7stPkuoBnxpVvsrd6c++MTl66TERof7rbxK9f
+7Oxl0FdH6VqRWS1/K8gVAVSp7HsRmKA/eUZVNxVA/XSvEeyj0Rp5UtKd6s4AClQe
+5V9g6TFmRTyMWe8NJS+8gwCJQdSNXYi+f9FTH/YMgZhH1WXGA3Dv30yG9ikFNpFw
+53vX3sJ66AnU/iCRQd5ye4rQz1nXYZ9RUE1rvTdW8myEHIO5ZkOycQT2k5HApAIv
+MQKCAQB7gj2nnQ5bTcj32h9xsrcOGAYnFG1024ZQhviBOJADdLj4iDek9JJZzvOl
+WT/OKBculmbtc4LIAcnG27j+ZPgtG3Hl+m2CvJresdpqa9kCY9/1njBTHRFoDKGj
+Ko2ZquVpVWZPvRSpFVa8XJcUkujhtydY9l8jHpT2rISeG36VxYvvYw2971XE+2K4
+SC3X6840Q5t6dy0pMmgsfHiQLNQdDRv4J0aPgKBOtfyzDiEMSpZTimVoukJbv1CG
+dupcggIKf+2RX8/9X5+kCLMyotGYwFAc2KHCkpnyZPqrEzsEblvCio6V4pJY7ncc
+fcZQJr07Qj62PSxShEZDeC0xBpcM
+-----END PRIVATE KEY-----
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 10770612998896443650 (0x9578e775146d6102)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Validity
+            Not Before: Jul  6 18:43:50 2017 GMT
+            Not After : Jul  4 18:43:50 2027 GMT
+        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (4096 bit)
+                Modulus:
+                    00:af:9a:06:f5:a3:dd:8e:e1:c9:1f:13:bf:4c:11:
+                    06:44:37:66:59:bb:31:0f:79:1b:2f:1b:86:8f:c5:
+                    93:bf:50:76:ac:29:f2:d8:e2:59:36:be:80:e6:17:
+                    b6:5e:0f:b1:8a:6b:fc:62:75:55:e5:fb:16:d5:66:
+                    12:9c:93:31:b9:2d:8c:29:9c:c7:37:0d:e7:aa:ec:
+                    85:be:88:b1:08:3e:c3:c3:90:4e:ed:35:12:9c:86:
+                    63:bc:42:43:a1:2a:22:38:72:af:c9:32:21:4f:c5:
+                    8c:a3:4f:d1:d5:44:82:76:bb:ef:d6:61:68:c9:af:
+                    ba:32:e1:e3:3e:12:6a:87:ca:62:64:9e:13:e5:ec:
+                    fc:d3:54:2e:9f:8e:09:70:87:eb:74:10:6d:f9:2b:
+                    b5:7c:db:d9:e3:ce:17:b4:fe:13:cc:81:a2:df:4c:
+                    50:32:47:de:d1:74:f3:8c:2b:04:6e:8c:3e:45:d3:
+                    bd:f7:d7:bd:cf:60:7c:b7:6a:16:9c:d7:4a:e9:fa:
+                    be:64:32:ed:ff:50:b3:95:05:0e:ae:41:68:d6:42:
+                    0e:bd:8a:c7:62:98:d8:07:fd:d2:96:d8:f8:f9:52:
+                    7b:5f:ba:70:94:99:f1:f7:9d:71:c9:50:28:97:64:
+                    a7:47:1a:bd:ea:a8:b9:c7:75:37:aa:40:7d:27:ad:
+                    c9:b8:a3:60:50:8f:69:e8:f0:c8:77:4b:0e:f0:62:
+                    7f:5a:ef:e1:ec:82:3e:82:bc:d0:b9:a6:40:e8:da:
+                    6a:76:69:49:b0:8b:cd:9c:3d:19:0a:89:dc:ae:44:
+                    ee:9a:98:ce:4d:79:08:f7:b5:50:6d:c7:b2:eb:c1:
+                    c6:12:31:04:8b:12:09:9d:93:3d:c9:9d:81:63:e3:
+                    bf:89:7b:4b:70:23:b3:8d:b6:a6:f1:8b:bd:84:2a:
+                    fb:2b:f9:93:7d:f1:70:97:dd:10:a3:4a:c9:78:b0:
+                    31:ea:a3:fb:43:bf:6f:9e:2d:bd:10:18:44:e1:13:
+                    cf:63:ed:8c:22:af:27:a0:10:63:86:ce:b7:fd:fc:
+                    3d:cf:e9:b8:b8:4d:01:e6:3f:7d:75:eb:32:9a:52:
+                    f3:22:c7:08:73:c5:78:35:f8:bd:4b:71:14:02:84:
+                    7a:a1:a7:fa:db:f0:62:00:e8:17:74:c9:bc:ee:64:
+                    79:19:9b:8b:2b:74:af:b1:e1:6d:9e:98:c8:e0:63:
+                    78:47:a0:17:a0:46:c2:42:cb:2b:c4:17:8a:02:33:
+                    d3:47:e1:2b:c4:c6:cf:a0:93:9d:fb:17:b4:34:d8:
+                    20:06:68:c5:25:62:f1:2a:78:65:1e:63:44:90:0c:
+                    65:2f:43:a0:9b:b9:43:1e:44:ab:9c:5d:1a:90:d2:
+                    d6:a5:bd
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Subject Key Identifier: 
+                5F:59:BA:74:46:93:39:6D:2F:72:06:69:96:F2:68:A8:14:9E:83:D2
+            X509v3 Authority Key Identifier: 
+                keyid:5F:59:BA:74:46:93:39:6D:2F:72:06:69:96:F2:68:A8:14:9E:83:D2
+
+            X509v3 Basic Constraints: 
+                CA:TRUE
+    Signature Algorithm: sha256WithRSAEncryption
+         9b:f8:fc:94:9d:92:bd:06:3f:20:5c:1a:f9:9a:75:e1:0f:18:
+         c5:09:b2:5c:45:b9:9a:91:0d:f2:53:3d:75:7b:ce:70:81:b4:
+         70:f7:51:7c:7d:b8:e0:10:f2:9a:45:96:7b:c8:fd:9e:3f:d6:
+         56:fa:07:dc:86:d0:b0:64:ab:78:97:d9:d6:58:43:fc:93:8f:
+         45:82:9f:6f:35:4b:ae:69:de:ca:18:ff:63:50:17:4d:e4:8d:
+         09:69:cd:6a:af:e7:ba:8a:9d:41:40:83:3f:f2:c7:26:0c:0d:
+         9c:c0:5b:8b:ce:4c:36:73:c0:f1:6b:0e:9b:fe:0d:63:1d:17:
+         3d:b6:1a:41:37:e2:86:39:4d:60:70:60:20:da:c9:8c:e2:98:
+         35:d5:4b:63:2e:bc:ca:de:89:c0:4f:dd:66:d9:11:f4:f3:43:
+         2f:02:b8:0c:6a:84:4c:27:42:4d:ce:4f:f8:17:22:04:b9:ea:
+         bc:7e:0d:07:d6:57:bb:00:ea:5c:ca:96:f6:fa:86:0f:92:27:
+         fb:d5:a5:d4:b6:71:62:1b:87:59:a9:3a:7a:78:99:c0:96:69:
+         14:ab:09:e0:01:b8:85:c6:80:b3:4e:48:19:5f:d3:a2:cf:4d:
+         19:55:e1:8a:95:f5:d4:b3:f8:04:32:b7:64:01:5b:7e:a4:37:
+         57:c6:a5:a2:a0:37:40:57:14:69:66:bd:90:d1:12:2c:74:e3:
+         c7:45:33:b7:c0:3b:12:3d:19:09:eb:57:70:c5:d5:91:5a:c1:
+         94:d9:e9:ac:84:33:2a:5a:52:4a:2b:52:8b:da:c3:53:f9:52:
+         1f:74:96:66:b3:a9:ff:43:47:87:6c:ec:6c:fc:c5:23:60:5c:
+         ec:fc:f1:16:38:61:12:c3:f4:21:dc:0d:55:de:e8:63:e7:d0:
+         a9:a6:f2:c4:9c:3e:05:b9:9f:4a:30:96:f2:0a:5a:4f:e4:b9:
+         01:4c:b9:82:70:4e:f4:4b:24:df:71:7f:91:f4:a3:94:bb:95:
+         49:b2:f2:1a:04:5f:bf:8d:1d:9a:88:c7:89:8e:0f:5a:af:f6:
+         21:7f:33:7e:58:16:c5:d0:f2:0d:df:95:70:e5:8a:70:82:d1:
+         32:12:2c:e6:2c:54:30:0e:a4:d8:6b:d4:5c:3f:dc:30:68:c0:
+         54:a2:85:0d:f9:1c:e0:af:00:ea:03:56:ab:b0:13:92:af:c4:
+         83:96:fe:d6:81:f6:6d:25:93:ee:94:3e:fb:7a:9b:ee:82:04:
+         1e:7f:92:eb:43:d4:1a:1b:09:7f:6e:a5:80:8a:18:a7:ae:1b:
+         aa:fd:c9:8b:c0:ae:78:9a:cb:b2:ee:71:e0:c4:c8:a7:7b:44:
+         c1:a1:38:5c:dc:6f:e7:08
+-----BEGIN CERTIFICATE-----
+MIIFkzCCA3ugAwIBAgIJAJV453UUbWECMA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW
+aWV3MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwHhcNMTcw
+NzA2MTg0MzUwWhcNMjcwNzA0MTg0MzUwWjBgMQswCQYDVQQGEwJVUzETMBEGA1UE
+CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UECgwH
+VGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIICIjANBgkqhkiG9w0BAQEFAAOC
+Ag8AMIICCgKCAgEAr5oG9aPdjuHJHxO/TBEGRDdmWbsxD3kbLxuGj8WTv1B2rCny
+2OJZNr6A5he2Xg+ximv8YnVV5fsW1WYSnJMxuS2MKZzHNw3nquyFvoixCD7Dw5BO
+7TUSnIZjvEJDoSoiOHKvyTIhT8WMo0/R1USCdrvv1mFoya+6MuHjPhJqh8piZJ4T
+5ez801Qun44JcIfrdBBt+Su1fNvZ484XtP4TzIGi30xQMkfe0XTzjCsEbow+RdO9
+99e9z2B8t2oWnNdK6fq+ZDLt/1CzlQUOrkFo1kIOvYrHYpjYB/3Sltj4+VJ7X7pw
+lJnx951xyVAol2SnRxq96qi5x3U3qkB9J63JuKNgUI9p6PDId0sO8GJ/Wu/h7II+
+grzQuaZA6NpqdmlJsIvNnD0ZConcrkTumpjOTXkI97VQbcey68HGEjEEixIJnZM9
+yZ2BY+O/iXtLcCOzjbam8Yu9hCr7K/mTffFwl90Qo0rJeLAx6qP7Q79vni29EBhE
+4RPPY+2MIq8noBBjhs63/fw9z+m4uE0B5j99desymlLzIscIc8V4Nfi9S3EUAoR6
+oaf62/BiAOgXdMm87mR5GZuLK3SvseFtnpjI4GN4R6AXoEbCQssrxBeKAjPTR+Er
+xMbPoJOd+xe0NNggBmjFJWLxKnhlHmNEkAxlL0Ogm7lDHkSrnF0akNLWpb0CAwEA
+AaNQME4wHQYDVR0OBBYEFF9ZunRGkzltL3IGaZbyaKgUnoPSMB8GA1UdIwQYMBaA
+FF9ZunRGkzltL3IGaZbyaKgUnoPSMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEL
+BQADggIBAJv4/JSdkr0GPyBcGvmadeEPGMUJslxFuZqRDfJTPXV7znCBtHD3UXx9
+uOAQ8ppFlnvI/Z4/1lb6B9yG0LBkq3iX2dZYQ/yTj0WCn281S65p3soY/2NQF03k
+jQlpzWqv57qKnUFAgz/yxyYMDZzAW4vOTDZzwPFrDpv+DWMdFz22GkE34oY5TWBw
+YCDayYzimDXVS2MuvMreicBP3WbZEfTzQy8CuAxqhEwnQk3OT/gXIgS56rx+DQfW
+V7sA6lzKlvb6hg+SJ/vVpdS2cWIbh1mpOnp4mcCWaRSrCeABuIXGgLNOSBlf06LP
+TRlV4YqV9dSz+AQyt2QBW36kN1fGpaKgN0BXFGlmvZDREix048dFM7fAOxI9GQnr
+V3DF1ZFawZTZ6ayEMypaUkorUovaw1P5Uh90lmazqf9DR4ds7Gz8xSNgXOz88RY4
+YRLD9CHcDVXe6GPn0Kmm8sScPgW5n0owlvIKWk/kuQFMuYJwTvRLJN9xf5H0o5S7
+lUmy8hoEX7+NHZqIx4mOD1qv9iF/M35YFsXQ8g3flXDlinCC0TISLOYsVDAOpNhr
+1Fw/3DBowFSihQ35HOCvAOoDVquwE5KvxIOW/taB9m0lk+6UPvt6m+6CBB5/kutD
+1BobCX9upYCKGKeuG6r9yYvArniay7LuceDEyKd7RMGhOFzcb+cI
+-----END CERTIFICATE-----
diff --git a/components/toolbar/test_toolbar_model.cc b/components/toolbar/test_toolbar_model.cc
index cebc76cc..59a81d9 100644
--- a/components/toolbar/test_toolbar_model.cc
+++ b/components/toolbar/test_toolbar_model.cc
@@ -47,3 +47,7 @@
 bool TestToolbarModel::ShouldDisplayURL() const {
   return should_display_url_;
 }
+
+bool TestToolbarModel::IsOfflinePage() const {
+  return offline_page_;
+}
diff --git a/components/toolbar/test_toolbar_model.h b/components/toolbar/test_toolbar_model.h
index 01daf60..0484b07 100644
--- a/components/toolbar/test_toolbar_model.h
+++ b/components/toolbar/test_toolbar_model.h
@@ -31,6 +31,7 @@
   base::string16 GetSecureVerboseText() const override;
   base::string16 GetEVCertName() const override;
   bool ShouldDisplayURL() const override;
+  bool IsOfflinePage() const override;
 
   void set_text(const base::string16& text) { text_ = text; }
   void set_url(const GURL& url) { url_ = url; }
@@ -44,14 +45,16 @@
   void set_should_display_url(bool should_display_url) {
     should_display_url_ = should_display_url;
   }
+  void set_offline_page(bool offline_page) { offline_page_ = offline_page; }
 
  private:
   base::string16 text_;
   GURL url_;
-  security_state::SecurityLevel security_level_;
+  security_state::SecurityLevel security_level_ = security_state::NONE;
   const gfx::VectorIcon* icon_ = nullptr;
   base::string16 ev_cert_name_;
-  bool should_display_url_;
+  bool should_display_url_ = false;
+  bool offline_page_ = false;
 
   DISALLOW_COPY_AND_ASSIGN(TestToolbarModel);
 };
diff --git a/components/toolbar/toolbar_model.h b/components/toolbar/toolbar_model.h
index 8aa1727d..0564882 100644
--- a/components/toolbar/toolbar_model.h
+++ b/components/toolbar/toolbar_model.h
@@ -60,6 +60,10 @@
   // in the location bar.
   virtual bool ShouldDisplayURL() const = 0;
 
+  // Returns whether the page is an offline page, sourced from a cache of
+  // previously-downloaded content.
+  virtual bool IsOfflinePage() const = 0;
+
   // Whether the text in the omnibox is currently being edited.
   void set_input_in_progress(bool input_in_progress) {
     input_in_progress_ = input_in_progress;
diff --git a/components/toolbar/toolbar_model_delegate.h b/components/toolbar/toolbar_model_delegate.h
index 91008e4..f0f4f17 100644
--- a/components/toolbar/toolbar_model_delegate.h
+++ b/components/toolbar/toolbar_model_delegate.h
@@ -56,6 +56,10 @@
   // knowledge of those schemes into this component.
   virtual const gfx::VectorIcon* GetVectorIconOverride() const = 0;
 
+  // Returns whether the page is an offline page, sourced from a cache of
+  // previously-downloaded content.
+  virtual bool IsOfflinePage() const = 0;
+
  protected:
   virtual ~ToolbarModelDelegate() {}
 };
diff --git a/components/toolbar/toolbar_model_impl.cc b/components/toolbar/toolbar_model_impl.cc
index 6111f92c..c24a388 100644
--- a/components/toolbar/toolbar_model_impl.cc
+++ b/components/toolbar/toolbar_model_impl.cc
@@ -138,3 +138,7 @@
 bool ToolbarModelImpl::ShouldDisplayURL() const {
   return delegate_->ShouldDisplayURL();
 }
+
+bool ToolbarModelImpl::IsOfflinePage() const {
+  return delegate_->IsOfflinePage();
+}
diff --git a/components/toolbar/toolbar_model_impl.h b/components/toolbar/toolbar_model_impl.h
index 619d3e56..6bbf45a 100644
--- a/components/toolbar/toolbar_model_impl.h
+++ b/components/toolbar/toolbar_model_impl.h
@@ -36,6 +36,7 @@
   base::string16 GetSecureVerboseText() const override;
   base::string16 GetEVCertName() const override;
   bool ShouldDisplayURL() const override;
+  bool IsOfflinePage() const override;
 
   ToolbarModelDelegate* delegate_;
   const size_t max_url_display_chars_;
diff --git a/components/update_client/background_downloader_win.cc b/components/update_client/background_downloader_win.cc
index 6f139d4..f82dc1c 100644
--- a/components/update_client/background_downloader_win.cc
+++ b/components/update_client/background_downloader_win.cc
@@ -30,7 +30,7 @@
 #include "url/gurl.h"
 
 using base::win::ScopedCoMem;
-using base::win::ScopedComPtr;
+using Microsoft::WRL::ComPtr;
 
 // The class BackgroundDownloader in this module is an adapter between
 // the CrxDownloader interface and the BITS service interfaces.
@@ -132,14 +132,14 @@
 const int kPurgeStaleJobsIntervalBetweenChecksDays = 1;
 
 // Retrieves the singleton instance of GIT for this process.
-HRESULT GetGit(ScopedComPtr<IGlobalInterfaceTable>* git) {
+HRESULT GetGit(ComPtr<IGlobalInterfaceTable>* git) {
   return ::CoCreateInstance(CLSID_StdGlobalInterfaceTable, NULL,
                             CLSCTX_INPROC_SERVER,
                             IID_PPV_ARGS(git->GetAddressOf()));
 }
 
 // Retrieves an interface pointer from the process GIT for a given |cookie|.
-HRESULT GetInterfaceFromGit(IGlobalInterfaceTable* git,
+HRESULT GetInterfaceFromGit(const ComPtr<IGlobalInterfaceTable>& git,
                             DWORD cookie,
                             REFIID riid,
                             void** ppv) {
@@ -148,8 +148,8 @@
 
 // Registers an interface pointer in GIT and returns its corresponding |cookie|.
 template <typename T>
-HRESULT RegisterInterfaceInGit(const ScopedComPtr<IGlobalInterfaceTable>& git,
-                               const ScopedComPtr<T>& p,
+HRESULT RegisterInterfaceInGit(const ComPtr<IGlobalInterfaceTable>& git,
+                               const ComPtr<T>& p,
                                DWORD* cookie) {
   return git->RegisterInterfaceInGlobal(p.Get(), __uuidof(T), cookie);
 }
@@ -168,9 +168,9 @@
 }
 
 // Returns the files in a BITS job.
-HRESULT GetFilesInJob(IBackgroundCopyJob* job,
-                      std::vector<ScopedComPtr<IBackgroundCopyFile>>* files) {
-  ScopedComPtr<IEnumBackgroundCopyFiles> enum_files;
+HRESULT GetFilesInJob(const ComPtr<IBackgroundCopyJob>& job,
+                      std::vector<ComPtr<IBackgroundCopyFile>>* files) {
+  ComPtr<IEnumBackgroundCopyFiles> enum_files;
   HRESULT hr = job->EnumFiles(enum_files.GetAddressOf());
   if (FAILED(hr))
     return hr;
@@ -181,7 +181,7 @@
     return hr;
 
   for (ULONG i = 0; i != num_files; ++i) {
-    ScopedComPtr<IBackgroundCopyFile> file;
+    ComPtr<IBackgroundCopyFile> file;
     if (enum_files->Next(1, file.GetAddressOf(), NULL) == S_OK && file.Get())
       files->push_back(file);
   }
@@ -191,7 +191,7 @@
 
 // Returns the file name, the url, and some per-file progress information.
 // The function out parameters can be NULL if that data is not requested.
-HRESULT GetJobFileProperties(IBackgroundCopyFile* file,
+HRESULT GetJobFileProperties(const ComPtr<IBackgroundCopyFile>& file,
                              base::string16* local_name,
                              base::string16* remote_name,
                              BG_FILE_PROGRESS* progress) {
@@ -230,7 +230,7 @@
 // Returns the number of bytes downloaded and bytes to download for all files
 // in the job. If the values are not known or if an error has occurred,
 // a value of -1 is reported.
-HRESULT GetJobByteCount(IBackgroundCopyJob* job,
+HRESULT GetJobByteCount(const ComPtr<IBackgroundCopyJob>& job,
                         int64_t* downloaded_bytes,
                         int64_t* total_bytes) {
   *downloaded_bytes = -1;
@@ -256,7 +256,8 @@
   return S_OK;
 }
 
-HRESULT GetJobDisplayName(IBackgroundCopyJob* job, base::string16* name) {
+HRESULT GetJobDisplayName(const ComPtr<IBackgroundCopyJob>& job,
+                          base::string16* name) {
   ScopedCoMem<base::char16> local_name;
   const HRESULT hr = job->GetDisplayName(&local_name);
   if (FAILED(hr))
@@ -268,9 +269,10 @@
 // Returns the job error code in |error_code| if the job is in the transient
 // or the final error state. Otherwise, the job error is not available and
 // the function fails.
-HRESULT GetJobError(IBackgroundCopyJob* job, HRESULT* error_code_out) {
+HRESULT GetJobError(const ComPtr<IBackgroundCopyJob>& job,
+                    HRESULT* error_code_out) {
   *error_code_out = S_OK;
-  ScopedComPtr<IBackgroundCopyError> copy_error;
+  ComPtr<IBackgroundCopyError> copy_error;
   HRESULT hr = job->GetError(copy_error.GetAddressOf());
   if (FAILED(hr))
     return hr;
@@ -290,9 +292,9 @@
 // no job was found, and it returns an error otherwise.
 template <class Predicate>
 HRESULT FindBitsJobIf(Predicate pred,
-                      IBackgroundCopyManager* bits_manager,
-                      std::vector<ScopedComPtr<IBackgroundCopyJob>>* jobs) {
-  ScopedComPtr<IEnumBackgroundCopyJobs> enum_jobs;
+                      const ComPtr<IBackgroundCopyManager>& bits_manager,
+                      std::vector<ComPtr<IBackgroundCopyJob>>* jobs) {
+  ComPtr<IEnumBackgroundCopyJobs> enum_jobs;
   HRESULT hr = bits_manager->EnumJobs(0, enum_jobs.GetAddressOf());
   if (FAILED(hr))
     return hr;
@@ -305,11 +307,11 @@
   // Iterate over jobs, run the predicate, and select the job only if
   // the job description matches the component updater jobs.
   for (ULONG i = 0; i != job_count; ++i) {
-    ScopedComPtr<IBackgroundCopyJob> current_job;
+    ComPtr<IBackgroundCopyJob> current_job;
     if (enum_jobs->Next(1, current_job.GetAddressOf(), NULL) == S_OK &&
-        pred(current_job.Get())) {
+        pred(current_job)) {
       base::string16 job_name;
-      hr = GetJobDisplayName(current_job.Get(), &job_name);
+      hr = GetJobDisplayName(current_job, &job_name);
       if (job_name.compare(kJobName) == 0)
         jobs->push_back(current_job);
     }
@@ -323,13 +325,14 @@
 class JobCreationOlderThanDays {
  public:
   explicit JobCreationOlderThanDays(int num_days) : num_days_(num_days) {}
-  bool operator()(IBackgroundCopyJob* job) const;
+  bool operator()(const ComPtr<IBackgroundCopyJob>& job) const;
 
  private:
   int num_days_;
 };
 
-bool JobCreationOlderThanDays::operator()(IBackgroundCopyJob* job) const {
+bool JobCreationOlderThanDays::operator()(
+    const ComPtr<IBackgroundCopyJob>& job) const {
   BG_JOB_TIMES times = {};
   HRESULT hr = job->GetTimes(&times);
   if (FAILED(hr))
@@ -347,14 +350,14 @@
  public:
   explicit JobFileUrlEqual(const base::string16& remote_name)
       : remote_name_(remote_name) {}
-  bool operator()(IBackgroundCopyJob* job) const;
+  bool operator()(const ComPtr<IBackgroundCopyJob>& job) const;
 
  private:
   base::string16 remote_name_;
 };
 
-bool JobFileUrlEqual::operator()(IBackgroundCopyJob* job) const {
-  std::vector<ScopedComPtr<IBackgroundCopyFile>> files;
+bool JobFileUrlEqual::operator()(const ComPtr<IBackgroundCopyJob>& job) const {
+  std::vector<ComPtr<IBackgroundCopyFile>> files;
   HRESULT hr = GetFilesInJob(job, &files);
   if (FAILED(hr))
     return false;
@@ -370,18 +373,19 @@
 }
 
 // Creates an instance of the BITS manager.
-HRESULT CreateBitsManager(IBackgroundCopyManager** bits_manager) {
-  ScopedComPtr<IBackgroundCopyManager> object;
-  HRESULT hr = ::CoCreateInstance(__uuidof(BackgroundCopyManager), nullptr,
-                                  CLSCTX_ALL, IID_PPV_ARGS(&object));
+HRESULT CreateBitsManager(ComPtr<IBackgroundCopyManager>* bits_manager) {
+  ComPtr<IBackgroundCopyManager> local_bits_manager;
+  HRESULT hr =
+      ::CoCreateInstance(__uuidof(BackgroundCopyManager), nullptr, CLSCTX_ALL,
+                         IID_PPV_ARGS(&local_bits_manager));
   if (FAILED(hr)) {
     return hr;
   }
-  *bits_manager = object.Detach();
+  *bits_manager = local_bits_manager;
   return S_OK;
 }
 
-void CleanupJob(IBackgroundCopyJob* job) {
+void CleanupJob(const ComPtr<IBackgroundCopyJob>& job) {
   if (!job)
     return;
 
@@ -389,13 +393,13 @@
   // Canceling the job removes it from the BITS queue right away. It appears
   // that it is still possible to query for the properties of the job after
   // the job has been canceled. It seems safer though to get the paths first.
-  std::vector<ScopedComPtr<IBackgroundCopyFile>> files;
+  std::vector<ComPtr<IBackgroundCopyFile>> files;
   GetFilesInJob(job, &files);
 
   std::vector<base::FilePath> paths;
   for (const auto& file : files) {
     base::string16 local_name;
-    HRESULT hr = GetJobFileProperties(file.Get(), &local_name, NULL, NULL);
+    HRESULT hr = GetJobFileProperties(file, &local_name, NULL, NULL);
     if (SUCCEEDED(hr))
       paths.push_back(base::FilePath(local_name));
   }
@@ -407,8 +411,7 @@
 }
 
 // Cleans up incompleted jobs that are too old.
-HRESULT CleanupStaleJobs(
-    const ScopedComPtr<IBackgroundCopyManager>& bits_manager) {
+HRESULT CleanupStaleJobs(const ComPtr<IBackgroundCopyManager>& bits_manager) {
   if (!bits_manager.Get())
     return E_FAIL;
 
@@ -422,15 +425,14 @@
 
   last_sweep = current_time;
 
-  std::vector<ScopedComPtr<IBackgroundCopyJob>> jobs;
-  HRESULT hr = FindBitsJobIf(
-      JobCreationOlderThanDays(kPurgeStaleJobsAfterDays),
-      bits_manager.Get(), &jobs);
+  std::vector<ComPtr<IBackgroundCopyJob>> jobs;
+  HRESULT hr = FindBitsJobIf(JobCreationOlderThanDays(kPurgeStaleJobsAfterDays),
+                             bits_manager, &jobs);
   if (FAILED(hr))
     return hr;
 
   for (const auto& job : jobs)
-    CleanupJob(job.Get());
+    CleanupJob(job);
 
   return S_OK;
 }
@@ -438,11 +440,12 @@
 // Returns the number of jobs in the BITS queue which were created by this
 // downloader.
 HRESULT GetBackgroundDownloaderJobCount(
-    const ScopedComPtr<IBackgroundCopyManager>& bits_manager,
+    const ComPtr<IBackgroundCopyManager>& bits_manager,
     size_t* num_jobs) {
-  std::vector<ScopedComPtr<IBackgroundCopyJob>> jobs;
-  const HRESULT hr = FindBitsJobIf([](IBackgroundCopyJob*) { return true; },
-                                   bits_manager.Get(), &jobs);
+  std::vector<ComPtr<IBackgroundCopyJob>> jobs;
+  const HRESULT hr =
+      FindBitsJobIf([](const ComPtr<IBackgroundCopyJob>&) { return true; },
+                    bits_manager, &jobs);
   if (FAILED(hr))
     return hr;
   *num_jobs = jobs.size();
@@ -504,15 +507,15 @@
       base::Bind(&BackgroundDownloader::StartTimer, base::Unretained(this)));
 }
 
-// Creates or opens an existing bits job, and handles the marshalling of
-// the interfaces in GIT.
+// Creates or opens an existing BITS job to download the |url|, and handles
+// the marshalling of the interfaces in GIT.
 HRESULT BackgroundDownloader::BeginDownloadHelper(const GURL& url) {
-  ScopedComPtr<IGlobalInterfaceTable> git;
+  ComPtr<IGlobalInterfaceTable> git;
   HRESULT hr = GetGit(&git);
   if (FAILED(hr))
     return hr;
 
-  hr = CreateBitsManager(bits_manager_.GetAddressOf());
+  hr = CreateBitsManager(&bits_manager_);
   if (FAILED(hr))
     return hr;
 
@@ -520,7 +523,7 @@
   if (FAILED(hr))
     return hr;
 
-  hr = QueueBitsJob(url, job_.GetAddressOf());
+  hr = QueueBitsJob(url, &job_);
   if (FAILED(hr))
     return hr;
 
@@ -608,10 +611,10 @@
 
   int64_t downloaded_bytes = -1;
   int64_t total_bytes = -1;
-  GetJobByteCount(job_.Get(), &downloaded_bytes, &total_bytes);
+  GetJobByteCount(job_, &downloaded_bytes, &total_bytes);
 
   if (FAILED(error))
-    CleanupJob(job_.Get());
+    CleanupJob(job_);
 
   CleanupStaleJobs(bits_manager_);
 
@@ -659,7 +662,7 @@
 // be made. Cancels this job and removes it from the BITS queue.
 bool BackgroundDownloader::OnStateError() {
   HRESULT error_code = S_OK;
-  HRESULT hr = GetJobError(job_.Get(), &error_code);
+  HRESULT hr = GetJobError(job_, &error_code);
   if (FAILED(hr))
     error_code = hr;
 
@@ -694,7 +697,7 @@
 
   // Don't retry at all if the transient error was a 5xx.
   HRESULT error_code = S_OK;
-  HRESULT hr = GetJobError(job_.Get(), &error_code);
+  HRESULT hr = GetJobError(job_, &error_code);
   if (SUCCEEDED(hr) &&
       IsHttpServerError(GetHttpStatusFromBitsError(error_code))) {
     return OnStateError();
@@ -719,7 +722,7 @@
 
   int64_t downloaded_bytes = -1;
   int64_t total_bytes = -1;
-  HRESULT hr = GetJobByteCount(job_.Get(), &downloaded_bytes, &total_bytes);
+  HRESULT hr = GetJobByteCount(job_, &downloaded_bytes, &total_bytes);
   if (FAILED(hr))
     return false;
 
@@ -736,63 +739,62 @@
 // Creates or opens a job for the given url and queues it up. Tries to
 // install a job observer but continues on if an observer can't be set up.
 HRESULT BackgroundDownloader::QueueBitsJob(const GURL& url,
-                                           IBackgroundCopyJob** job) {
+                                           ComPtr<IBackgroundCopyJob>* job) {
   DCHECK(task_runner()->RunsTasksInCurrentSequence());
 
   size_t num_jobs = 0;
   GetBackgroundDownloaderJobCount(bits_manager_, &num_jobs);
   UMA_HISTOGRAM_COUNTS_100("UpdateClient.BackgroundDownloaderJobs", num_jobs);
 
-  ScopedComPtr<IBackgroundCopyJob> local_job;
-  HRESULT hr = CreateOrOpenJob(url, local_job.GetAddressOf());
+  ComPtr<IBackgroundCopyJob> local_job;
+  HRESULT hr = CreateOrOpenJob(url, &local_job);
   if (FAILED(hr)) {
-    CleanupJob(local_job.Get());
+    CleanupJob(local_job);
     return hr;
   }
 
   hr = local_job->Resume();
   if (FAILED(hr)) {
-    CleanupJob(local_job.Get());
+    CleanupJob(local_job);
     return hr;
   }
 
-  *job = local_job.Detach();
+  *job = local_job;
   return S_OK;
 }
 
 HRESULT BackgroundDownloader::CreateOrOpenJob(const GURL& url,
-                                              IBackgroundCopyJob** job) {
-  std::vector<ScopedComPtr<IBackgroundCopyJob>> jobs;
-  HRESULT hr = FindBitsJobIf(
-      JobFileUrlEqual(base::SysUTF8ToWide(url.spec())),
-      bits_manager_.Get(), &jobs);
+                                              ComPtr<IBackgroundCopyJob>* job) {
+  std::vector<ComPtr<IBackgroundCopyJob>> jobs;
+  HRESULT hr = FindBitsJobIf(JobFileUrlEqual(base::SysUTF8ToWide(url.spec())),
+                             bits_manager_, &jobs);
   if (SUCCEEDED(hr) && !jobs.empty()) {
-    *job = jobs.front().Detach();
+    *job = jobs.front();
     return hr;
   }
 
-  ScopedComPtr<IBackgroundCopyJob> local_job;
+  ComPtr<IBackgroundCopyJob> local_job;
 
   GUID guid = {0};
   hr = bits_manager_->CreateJob(kJobName, BG_JOB_TYPE_DOWNLOAD, &guid,
                                 local_job.GetAddressOf());
   if (FAILED(hr)) {
-    CleanupJob(local_job.Get());
+    CleanupJob(local_job);
     return hr;
   }
 
   hr = InitializeNewJob(local_job, url);
   if (FAILED(hr)) {
-    CleanupJob(local_job.Get());
+    CleanupJob(local_job);
     return hr;
   }
 
-  *job = local_job.Detach();
+  *job = local_job;
   return S_OK;
 }
 
 HRESULT BackgroundDownloader::InitializeNewJob(
-    const base::win::ScopedComPtr<IBackgroundCopyJob>& job,
+    const ComPtr<IBackgroundCopyJob>& job,
     const GURL& url) {
   base::FilePath tempdir;
   if (!base::CreateNewTempDirectory(FILE_PATH_LITERAL("chrome_BITS_"),
@@ -836,8 +838,8 @@
   if (FAILED(hr) && hr != BG_S_UNABLE_TO_DELETE_FILES)
     return hr;
 
-  std::vector<ScopedComPtr<IBackgroundCopyFile>> files;
-  hr = GetFilesInJob(job_.Get(), &files);
+  std::vector<ComPtr<IBackgroundCopyFile>> files;
+  hr = GetFilesInJob(job_, &files);
   if (FAILED(hr))
     return hr;
 
@@ -846,7 +848,7 @@
 
   base::string16 local_name;
   BG_FILE_PROGRESS progress = {0};
-  hr = GetJobFileProperties(files.front().Get(), &local_name, NULL, &progress);
+  hr = GetJobFileProperties(files.front(), &local_name, NULL, &progress);
   if (FAILED(hr))
     return hr;
 
@@ -864,19 +866,21 @@
 HRESULT BackgroundDownloader::UpdateInterfacePointers() {
   DCHECK(task_runner()->RunsTasksInCurrentSequence());
 
-  ScopedComPtr<IGlobalInterfaceTable> git;
+  bits_manager_ = nullptr;
+  job_ = nullptr;
+
+  ComPtr<IGlobalInterfaceTable> git;
   HRESULT hr = GetGit(&git);
   if (FAILED(hr))
     return hr;
 
-  bits_manager_ = nullptr;
-  hr = GetInterfaceFromGit(git.Get(), git_cookie_bits_manager_,
-                           IID_PPV_ARGS(&bits_manager_));
+  hr = GetInterfaceFromGit(git, git_cookie_bits_manager_,
+                           IID_PPV_ARGS(bits_manager_.GetAddressOf()));
   if (FAILED(hr))
     return hr;
 
-  job_ = nullptr;
-  hr = GetInterfaceFromGit(git.Get(), git_cookie_job_, IID_PPV_ARGS(&job_));
+  hr = GetInterfaceFromGit(git, git_cookie_job_,
+                           IID_PPV_ARGS(job_.GetAddressOf()));
   if (FAILED(hr))
     return hr;
 
@@ -893,7 +897,7 @@
 
   ResetInterfacePointers();
 
-  ScopedComPtr<IGlobalInterfaceTable> git;
+  ComPtr<IGlobalInterfaceTable> git;
   HRESULT hr = GetGit(&git);
   if (FAILED(hr))
     return hr;
diff --git a/components/update_client/background_downloader_win.h b/components/update_client/background_downloader_win.h
index 52ed1e25..ca71df0a 100644
--- a/components/update_client/background_downloader_win.h
+++ b/components/update_client/background_downloader_win.h
@@ -5,8 +5,9 @@
 #ifndef COMPONENTS_UPDATE_CLIENT_BACKGROUND_DOWNLOADER_WIN_H_
 #define COMPONENTS_UPDATE_CLIENT_BACKGROUND_DOWNLOADER_WIN_H_
 
-#include <windows.h>
 #include <bits.h>
+#include <windows.h>
+#include <wrl/client.h>
 
 #include <memory>
 
@@ -16,7 +17,6 @@
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
-#include "base/win/scoped_comptr.h"
 #include "components/update_client/crx_downloader.h"
 
 namespace base {
@@ -87,10 +87,12 @@
   void StartTimer();
   void OnTimer();
 
-  HRESULT QueueBitsJob(const GURL& url, IBackgroundCopyJob** job);
-  HRESULT CreateOrOpenJob(const GURL& url, IBackgroundCopyJob** job);
+  HRESULT QueueBitsJob(const GURL& url,
+                       Microsoft::WRL::ComPtr<IBackgroundCopyJob>* job);
+  HRESULT CreateOrOpenJob(const GURL& url,
+                          Microsoft::WRL::ComPtr<IBackgroundCopyJob>* job);
   HRESULT InitializeNewJob(
-      const base::win::ScopedComPtr<IBackgroundCopyJob>& job,
+      const Microsoft::WRL::ComPtr<IBackgroundCopyJob>& job,
       const GURL& url);
 
   // Returns true if at the time of the call, it appears that the job
@@ -128,8 +130,8 @@
   // COM interface pointers are valid for the thread that called
   // |UpdateInterfacePointers| to get pointers to COM proxies, which are valid
   // for that thread only.
-  base::win::ScopedComPtr<IBackgroundCopyManager> bits_manager_;
-  base::win::ScopedComPtr<IBackgroundCopyJob> job_;
+  Microsoft::WRL::ComPtr<IBackgroundCopyManager> bits_manager_;
+  Microsoft::WRL::ComPtr<IBackgroundCopyJob> job_;
 
   // Contains the time when the download of the current url has started.
   base::TimeTicks download_start_time_;
diff --git a/components/url_formatter/elide_url.cc b/components/url_formatter/elide_url.cc
index e19da1f7..984de31 100644
--- a/components/url_formatter/elide_url.cc
+++ b/components/url_formatter/elide_url.cc
@@ -174,8 +174,12 @@
   // Get the path substring, including query and reference.
   const size_t path_start_index = parsed.path.begin;
   const size_t path_len = parsed.path.len;
-  base::string16 url_path_query_etc = url_string.substr(path_start_index);
-  base::string16 url_path = url_string.substr(path_start_index, path_len);
+  base::string16 url_path_query_etc;
+  base::string16 url_path;
+  if (parsed.path.is_valid()) {
+    url_path_query_etc = url_string.substr(path_start_index);
+    url_path = url_string.substr(path_start_index, path_len);
+  }
 
   // Return general elided text if url minus the query fits.
   const base::string16 url_minus_query =
@@ -255,6 +259,8 @@
   }
 
   const size_t kMaxNumberOfUrlPathElementsAllowed = 1024;
+  // TODO(mgiuca): If there is no path, this means the end of the domain gets
+  // elided, not the start (inconsistent). https://crbug.com/739636.
   if (url_path_number_of_elements <= 1 ||
       url_path_number_of_elements > kMaxNumberOfUrlPathElementsAllowed) {
     // No path to elide, or too long of a path (could overflow in loop below)
diff --git a/components/url_formatter/elide_url_unittest.cc b/components/url_formatter/elide_url_unittest.cc
index 4ded2f99..54f7024 100644
--- a/components/url_formatter/elide_url_unittest.cc
+++ b/components/url_formatter/elide_url_unittest.cc
@@ -30,7 +30,7 @@
 
 #if !defined(OS_ANDROID)
 void RunUrlTest(Testcase* testcases, size_t num_testcases) {
-  static const gfx::FontList font_list;
+  const gfx::FontList font_list;
   for (size_t i = 0; i < num_testcases; ++i) {
     const GURL url(testcases[i].input);
     const float available_width =
@@ -110,10 +110,35 @@
 #endif
   const std::string kEllipsisStr(gfx::kEllipsis);
   Testcase testcases[] = {
+      // Eliding the same URL to various lengths.
       {"http://www.google.com/foo?bar", "www.google.com/foo?bar"},
       {"http://xyz.google.com/foo?bar", "xyz.google.com/foo?" + kEllipsisStr},
       {"http://xyz.google.com/foo?bar", "xyz.google.com/foo" + kEllipsisStr},
       {"http://xyz.google.com/foo?bar", "xyz.google.com/fo" + kEllipsisStr},
+      {"http://xyz.google.com/foo?bar",
+       kEllipsisStr + "google.com/fo" + kEllipsisStr},
+      {"http://xyz.google.com/foo?bar",
+       kEllipsisStr + "google.com/f" + kEllipsisStr},
+      {"http://xyz.google.com/foo?bar",
+       kEllipsisStr + "google.com/" + kEllipsisStr},
+      {"http://xyz.google.com/foo?bar",
+       kEllipsisStr + "google.com" + kEllipsisStr},
+      {"http://xyz.google.com/foo?bar",
+       kEllipsisStr + "google.co" + kEllipsisStr},
+      {"http://xyz.google.com/foo?bar",
+       kEllipsisStr + "google.c" + kEllipsisStr},
+      {"http://xyz.google.com/foo?bar",
+       kEllipsisStr + "google." + kEllipsisStr},
+      {"http://xyz.google.com/foo?bar", kEllipsisStr + "google" + kEllipsisStr},
+      {"http://xyz.google.com/foo?bar", kEllipsisStr + "googl" + kEllipsisStr},
+      {"http://xyz.google.com/foo?bar", kEllipsisStr + "g" + kEllipsisStr},
+
+      // URL with no path.
+      // TODO(mgiuca): These should elide the start of the URL, not the end.
+      // https://crbug.com/739636.
+      {"http://xyz.google.com", "xyz.google" + kEllipsisStr},
+      {"https://xyz.google.com", "xyz.google" + kEllipsisStr},
+
       {"http://a.b.com/pathname/c?d", "a.b.com/" + kEllipsisStr + "/c?d"},
       {"", ""},
       {"http://foo.bar..example.com...hello/test/filename.html",
diff --git a/components/variations/variations_switches.cc b/components/variations/variations_switches.cc
index 5b19c66..2f83ead 100644
--- a/components/variations/variations_switches.cc
+++ b/components/variations/variations_switches.cc
@@ -10,6 +10,10 @@
 // Disable field trial tests configured in fieldtrial_testing_config.json.
 const char kDisableFieldTrialTestingConfig[] = "disable-field-trial-config";
 
+// TODO(asvitkine): Consider removing or renaming this functionality.
+// Enables the benchmarking extensions.
+const char kEnableBenchmarking[] = "enable-benchmarking";
+
 // Fakes the channel of the browser for purposes of Variations filtering. This
 // is to be used for testing only. Possible values are "stable", "beta", "dev"
 // and "canary". Note that this only applies if the browser's reported channel
@@ -26,6 +30,11 @@
 // escaped for all non-alphanumeric characters.
 const char kForceFieldTrialParams[] = "force-fieldtrial-params";
 
+// Forces additional Chrome Variation Ids that will be sent in X-Client-Data
+// header, specified as a 64-bit encoded list of numeric experiment ids. Ids
+// prefixed with the character "t" will be treated as Trigger Variation Ids.
+const char kForceVariationIds[] = "force-variation-ids";
+
 // Allows overriding the country used for evaluating variations. This is similar
 // to the "Override Variations Country" entry on chrome://translate-internals,
 // but is exposed as a command-line flag to allow testing First Run scenarios.
diff --git a/components/variations/variations_switches.h b/components/variations/variations_switches.h
index 9755dac4..95999b1f 100644
--- a/components/variations/variations_switches.h
+++ b/components/variations/variations_switches.h
@@ -12,8 +12,10 @@
 // each in the .cc file.
 
 extern const char kDisableFieldTrialTestingConfig[];
+extern const char kEnableBenchmarking[];
 extern const char kFakeVariationsChannel[];
 extern const char kForceFieldTrialParams[];
+extern const char kForceVariationIds[];
 extern const char kVariationsOverrideCountry[];
 extern const char kVariationsServerURL[];
 
diff --git a/components/viz/service/frame_sinks/frame_sink_manager_impl.cc b/components/viz/service/frame_sinks/frame_sink_manager_impl.cc
index 0c156ce..121c13e 100644
--- a/components/viz/service/frame_sinks/frame_sink_manager_impl.cc
+++ b/components/viz/service/frame_sinks/frame_sink_manager_impl.cc
@@ -11,7 +11,6 @@
 #include "cc/base/switches.h"
 #include "cc/scheduler/begin_frame_source.h"
 #include "cc/surfaces/display.h"
-#include "cc/surfaces/surface_dependency_tracker.h"
 #include "components/viz/service/display_embedder/display_provider.h"
 #include "components/viz/service/frame_sinks/gpu_compositor_frame_sink.h"
 #include "components/viz/service/frame_sinks/gpu_root_compositor_frame_sink.h"
@@ -26,15 +25,10 @@
       display_provider_(display_provider),
       binding_(this) {
   manager_.AddObserver(this);
-  dependency_tracker_ =
-      base::MakeUnique<cc::SurfaceDependencyTracker>(&manager_);
-  manager_.SetDependencyTracker(dependency_tracker_.get());
 }
 
 FrameSinkManagerImpl::~FrameSinkManagerImpl() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  manager_.SetDependencyTracker(nullptr);
-  dependency_tracker_.reset();
   manager_.RemoveObserver(this);
 }
 
diff --git a/components/viz/service/frame_sinks/frame_sink_manager_impl.h b/components/viz/service/frame_sinks/frame_sink_manager_impl.h
index 37add4c..bf6102c 100644
--- a/components/viz/service/frame_sinks/frame_sink_manager_impl.h
+++ b/components/viz/service/frame_sinks/frame_sink_manager_impl.h
@@ -98,8 +98,6 @@
   // access to a valid pointer for the entirety of their lifetimes.
   cc::SurfaceManager manager_;
 
-  std::unique_ptr<cc::SurfaceDependencyTracker> dependency_tracker_;
-
   // Provides a cc::Display for CreateRootCompositorFrameSink().
   DisplayProvider* const display_provider_;
 
diff --git a/content/app/content_service_manager_main_delegate.cc b/content/app/content_service_manager_main_delegate.cc
index 1055bc3..b8beab1 100644
--- a/content/app/content_service_manager_main_delegate.cc
+++ b/content/app/content_service_manager_main_delegate.cc
@@ -37,6 +37,16 @@
   return content_main_runner_->Initialize(content_main_params_);
 }
 
+bool ContentServiceManagerMainDelegate::IsEmbedderSubprocess() {
+  auto type = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+      switches::kProcessType);
+  return type == switches::kGpuProcess ||
+         type == switches::kPpapiBrokerProcess ||
+         type == switches::kPpapiPluginProcess ||
+         type == switches::kRendererProcess ||
+         type == switches::kUtilityProcess || type == switches::kZygoteProcess;
+}
+
 int ContentServiceManagerMainDelegate::RunEmbedderProcess() {
   return content_main_runner_->Run();
 }
diff --git a/content/app/content_service_manager_main_delegate.h b/content/app/content_service_manager_main_delegate.h
index c0fd31d..7563ce4 100644
--- a/content/app/content_service_manager_main_delegate.h
+++ b/content/app/content_service_manager_main_delegate.h
@@ -23,6 +23,7 @@
 
   // service_manager::MainDelegate:
   int Initialize(const InitializeParams& params) override;
+  bool IsEmbedderSubprocess() override;
   int RunEmbedderProcess() override;
   void ShutDownEmbedderProcess() override;
   service_manager::ProcessType OverrideProcessType() override;
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 9d7600a..21861aa 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -1136,6 +1136,8 @@
     "renderer_host/input/input_router_config_helper.h",
     "renderer_host/input/legacy_input_router_impl.cc",
     "renderer_host/input/legacy_input_router_impl.h",
+    "renderer_host/input/legacy_ipc_widget_input_handler.cc",
+    "renderer_host/input/legacy_ipc_widget_input_handler.h",
     "renderer_host/input/legacy_touch_event_queue.cc",
     "renderer_host/input/legacy_touch_event_queue.h",
     "renderer_host/input/motion_event_web.cc",
diff --git a/content/browser/OWNERS b/content/browser/OWNERS
index 1bc2cd25..b112c31 100644
--- a/content/browser/OWNERS
+++ b/content/browser/OWNERS
@@ -12,3 +12,7 @@
 # Mac Sandbox profiles.
 per-file *.sb=set noparent
 per-file *.sb=rsesek@chromium.org
+
+# Mac Sandbox parameters.
+per-file sandbox_parameters_mac.*=rsesek@chromium.org
+per-file sandbox_parameters_mac.*=kerrnel@chromium.org
diff --git a/content/browser/android/ime_adapter_android.cc b/content/browser/android/ime_adapter_android.cc
index c864386..5bd5f4b 100644
--- a/content/browser/android/ime_adapter_android.cc
+++ b/content/browser/android/ime_adapter_android.cc
@@ -27,7 +27,7 @@
 #include "jni/ImeAdapter_jni.h"
 #include "third_party/WebKit/public/platform/WebInputEvent.h"
 #include "third_party/WebKit/public/platform/WebTextInputType.h"
-#include "third_party/WebKit/public/web/WebCompositionUnderline.h"
+#include "ui/base/ime/composition_underline.h"
 
 using base::android::AttachCurrentThread;
 using base::android::ConvertJavaStringToUTF16;
@@ -77,7 +77,7 @@
 }
 
 // Callback from Java to convert BackgroundColorSpan data to a
-// blink::WebCompositionUnderline instance, and append it to |underlines_ptr|.
+// ui::CompositionUnderline instance, and append it to |underlines_ptr|.
 void AppendBackgroundColorSpan(JNIEnv*,
                                const JavaParamRef<jclass>&,
                                jlong underlines_ptr,
@@ -87,16 +87,15 @@
   DCHECK_GE(start, 0);
   DCHECK_GE(end, 0);
   // Do not check |background_color|.
-  std::vector<blink::WebCompositionUnderline>* underlines =
-      reinterpret_cast<std::vector<blink::WebCompositionUnderline>*>(
-          underlines_ptr);
-  underlines->push_back(blink::WebCompositionUnderline(
+  std::vector<ui::CompositionUnderline>* underlines =
+      reinterpret_cast<std::vector<ui::CompositionUnderline>*>(underlines_ptr);
+  underlines->push_back(ui::CompositionUnderline(
       static_cast<unsigned>(start), static_cast<unsigned>(end),
       SK_ColorTRANSPARENT, false, static_cast<unsigned>(background_color)));
 }
 
 // Callback from Java to convert UnderlineSpan data to a
-// blink::WebCompositionUnderline instance, and append it to |underlines_ptr|.
+// ui::CompositionUnderline instance, and append it to |underlines_ptr|.
 void AppendUnderlineSpan(JNIEnv*,
                          const JavaParamRef<jclass>&,
                          jlong underlines_ptr,
@@ -104,10 +103,9 @@
                          jint end) {
   DCHECK_GE(start, 0);
   DCHECK_GE(end, 0);
-  std::vector<blink::WebCompositionUnderline>* underlines =
-      reinterpret_cast<std::vector<blink::WebCompositionUnderline>*>(
-          underlines_ptr);
-  underlines->push_back(blink::WebCompositionUnderline(
+  std::vector<ui::CompositionUnderline>* underlines =
+      reinterpret_cast<std::vector<ui::CompositionUnderline>*>(underlines_ptr);
+  underlines->push_back(ui::CompositionUnderline(
       static_cast<unsigned>(start), static_cast<unsigned>(end), SK_ColorBLACK,
       false, SK_ColorTRANSPARENT));
 }
@@ -216,12 +214,12 @@
 
   base::string16 text16 = ConvertJavaStringToUTF16(env, text_str);
 
-  std::vector<blink::WebCompositionUnderline> underlines =
+  std::vector<ui::CompositionUnderline> underlines =
       GetUnderlinesFromSpans(env, obj, text, text16);
 
   // Default to plain underline if we didn't find any span that we care about.
   if (underlines.empty()) {
-    underlines.push_back(blink::WebCompositionUnderline(
+    underlines.push_back(ui::CompositionUnderline(
         0, text16.length(), SK_ColorBLACK, false, SK_ColorTRANSPARENT));
   }
 
@@ -246,7 +244,7 @@
 
   base::string16 text16 = ConvertJavaStringToUTF16(env, text_str);
 
-  std::vector<blink::WebCompositionUnderline> underlines =
+  std::vector<ui::CompositionUnderline> underlines =
       GetUnderlinesFromSpans(env, obj, text, text16);
 
   // relative_cursor_pos is as described in the Android API for
@@ -288,7 +286,8 @@
 void ImeAdapterAndroid::AdvanceFocusInForm(JNIEnv* env,
                                            const JavaParamRef<jobject>& obj,
                                            jint focus_type) {
-  RenderFrameHost* rfh = GetFocusedFrame();
+  RenderFrameHostImpl* rfh =
+      static_cast<RenderFrameHostImpl*>(GetFocusedFrame());
   if (!rfh)
     return;
 
@@ -301,7 +300,8 @@
     const JavaParamRef<jobject>&,
     int start,
     int end) {
-  RenderFrameHost* rfh = GetFocusedFrame();
+  RenderFrameHostImpl* rfh =
+      static_cast<RenderFrameHostImpl*>(GetFocusedFrame());
   if (!rfh)
     return;
 
@@ -335,7 +335,8 @@
                                            const JavaParamRef<jobject>&,
                                            int start,
                                            int end) {
-  RenderFrameHost* rfh = GetFocusedFrame();
+  RenderFrameHostImpl* rfh =
+      static_cast<RenderFrameHostImpl*>(GetFocusedFrame());
   if (!rfh)
     return;
 
@@ -376,7 +377,7 @@
   RenderWidgetHostImpl* rwhi = GetFocusedWidget();
   if (!rwhi)
     return false;
-  rwhi->Send(new InputMsg_RequestTextInputStateUpdate(rwhi->GetRoutingID()));
+  rwhi->GetWidgetInputHandler()->RequestTextInputStateUpdate();
   return true;
 }
 
@@ -388,8 +389,8 @@
   RenderWidgetHostImpl* rwhi = GetFocusedWidget();
   if (!rwhi)
     return;
-  rwhi->Send(new InputMsg_RequestCompositionUpdates(
-      rwhi->GetRoutingID(), immediate_request, monitor_request));
+  rwhi->GetWidgetInputHandler()->RequestCompositionUpdates(immediate_request,
+                                                           monitor_request);
 }
 
 RenderWidgetHostImpl* ImeAdapterAndroid::GetFocusedWidget() {
@@ -415,13 +416,12 @@
   return nullptr;
 }
 
-std::vector<blink::WebCompositionUnderline>
-ImeAdapterAndroid::GetUnderlinesFromSpans(
+std::vector<ui::CompositionUnderline> ImeAdapterAndroid::GetUnderlinesFromSpans(
     JNIEnv* env,
     const base::android::JavaParamRef<jobject>& obj,
     const base::android::JavaParamRef<jobject>& text,
     const base::string16& text16) {
-  std::vector<blink::WebCompositionUnderline> underlines;
+  std::vector<ui::CompositionUnderline> underlines;
   // Iterate over spans in |text|, dispatch those that we care about (e.g.,
   // BackgroundColorSpan) to a matching callback (e.g.,
   // AppendBackgroundColorSpan()), and populate |underlines|.
diff --git a/content/browser/android/ime_adapter_android.h b/content/browser/android/ime_adapter_android.h
index 25012d8a..b0f775f 100644
--- a/content/browser/android/ime_adapter_android.h
+++ b/content/browser/android/ime_adapter_android.h
@@ -14,11 +14,11 @@
 #include "content/common/content_export.h"
 #include "ui/gfx/geometry/rect_f.h"
 
-namespace blink {
+namespace ui {
 
-struct WebCompositionUnderline;
+struct CompositionUnderline;
 
-}  // namespace blink
+}  // namespace ui
 
 namespace content {
 
@@ -113,7 +113,7 @@
  private:
   RenderWidgetHostImpl* GetFocusedWidget();
   RenderFrameHost* GetFocusedFrame();
-  std::vector<blink::WebCompositionUnderline> GetUnderlinesFromSpans(
+  std::vector<ui::CompositionUnderline> GetUnderlinesFromSpans(
       JNIEnv* env,
       const base::android::JavaParamRef<jobject>& obj,
       const base::android::JavaParamRef<jobject>& text,
diff --git a/content/browser/blob_storage/blob_storage_browsertest.cc b/content/browser/blob_storage/blob_storage_browsertest.cc
index b51989b..ac516a8 100644
--- a/content/browser/blob_storage/blob_storage_browsertest.cc
+++ b/content/browser/blob_storage/blob_storage_browsertest.cc
@@ -11,6 +11,7 @@
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/content_browser_test.h"
 #include "content/public/test/content_browser_test_utils.h"
+#include "content/public/test/test_utils.h"
 #include "content/shell/browser/shell.h"
 #include "storage/browser/blob/blob_memory_controller.h"
 #include "storage/browser/blob/blob_storage_context.h"
@@ -99,8 +100,7 @@
 
   // Make sure we run all file / io tasks.
   base::RunLoop().RunUntilIdle();
-  BrowserThread::GetBlockingPool()->FlushForTesting();
-  base::RunLoop().RunUntilIdle();
+  RunAllBlockingPoolTasksUntilIdle();
 }
 
 }  // namespace content
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc
index cb740d98..4330c11 100644
--- a/content/browser/browser_context.cc
+++ b/content/browser/browser_context.cc
@@ -482,13 +482,7 @@
     if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
             switches::kDisableMojoLocalStorage)) {
       service_manager::EmbeddedServiceInfo info;
-      // TODO(mek): Use sequenced task runner rather than single thread task
-      // runner when mojo supports that (http://crbug.com/678155).
-      info.factory = base::Bind(
-          &file::CreateFileService,
-          base::CreateSingleThreadTaskRunnerWithTraits(
-              {base::MayBlock(), base::TaskShutdownBehavior::BLOCK_SHUTDOWN}),
-          BrowserThread::GetTaskRunnerForThread(BrowserThread::DB));
+      info.factory = base::Bind(&file::CreateFileService);
       connection->AddEmbeddedService(file::mojom::kServiceName, info);
     }
 
diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc
index 7e01f32..4889010 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.cc
+++ b/content/browser/browser_plugin/browser_plugin_guest.cc
@@ -60,6 +60,20 @@
 
 namespace content {
 
+namespace {
+
+std::vector<ui::CompositionUnderline> ConvertToUiUnderline(
+    const std::vector<blink::WebCompositionUnderline>& underlines) {
+  std::vector<ui::CompositionUnderline> ui_underlines;
+  for (const auto& underline : underlines) {
+    ui_underlines.emplace_back(ui::CompositionUnderline(
+        underline.start_offset, underline.end_offset, underline.color,
+        underline.thick, underline.background_color));
+  }
+  return ui_underlines;
+}
+};  // namespace
+
 class BrowserPluginGuest::EmbedderVisibilityObserver
     : public WebContentsObserver {
  public:
@@ -226,7 +240,7 @@
     static_cast<RenderViewHostImpl*>(RenderViewHost::From(rwh))
         ->SetInitialFocus(focus_type == blink::kWebFocusTypeBackward);
   }
-  rwh->Send(new InputMsg_SetFocus(rwh->GetRoutingID(), focused));
+  RenderWidgetHostImpl::From(rwh)->GetWidgetInputHandler()->SetFocus(focused);
   if (!focused && mouse_locked_)
     OnUnlockMouse();
 
@@ -680,7 +694,9 @@
   RenderViewHost* rvh = GetWebContents()->GetRenderViewHost();
   // TODO(fsamuel): Investigate whether it's possible to update state earlier
   // here (see http://crbug.com/158151).
-  Send(new InputMsg_SetFocus(routing_id(), focused_));
+  RenderWidgetHostImpl::From(rvh->GetWidget())
+      ->GetWidgetInputHandler()
+      ->SetFocus(focused_);
   UpdateVisibility();
 
   // In case we've created a new guest render process after a crash, let the
@@ -907,7 +923,8 @@
 
 void BrowserPluginGuest::OnExecuteEditCommand(int browser_plugin_instance_id,
                                               const std::string& name) {
-  RenderFrameHost* focused_frame = web_contents()->GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame =
+      static_cast<RenderFrameHostImpl*>(web_contents()->GetFocusedFrame());
   if (!focused_frame)
     return;
 
@@ -918,9 +935,14 @@
 void BrowserPluginGuest::OnImeSetComposition(
     int browser_plugin_instance_id,
     const BrowserPluginHostMsg_SetComposition_Params& params) {
-  Send(new InputMsg_ImeSetComposition(
-      routing_id(), params.text, params.underlines, params.replacement_range,
-      params.selection_start, params.selection_end));
+  std::vector<ui::CompositionUnderline> ui_underlines =
+      ConvertToUiUnderline(params.underlines);
+  GetWebContents()
+      ->GetRenderViewHost()
+      ->GetWidget()
+      ->GetWidgetInputHandler()
+      ->ImeSetComposition(params.text, ui_underlines, params.replacement_range,
+                          params.selection_start, params.selection_end);
 }
 
 void BrowserPluginGuest::OnImeCommitText(
@@ -929,15 +951,25 @@
     const std::vector<blink::WebCompositionUnderline>& underlines,
     const gfx::Range& replacement_range,
     int relative_cursor_pos) {
-  Send(new InputMsg_ImeCommitText(routing_id(), text, underlines,
-                                  replacement_range, relative_cursor_pos));
+  std::vector<ui::CompositionUnderline> ui_underlines =
+      ConvertToUiUnderline(underlines);
+  GetWebContents()
+      ->GetRenderViewHost()
+      ->GetWidget()
+      ->GetWidgetInputHandler()
+      ->ImeCommitText(text, ui_underlines, replacement_range,
+                      relative_cursor_pos);
 }
 
 void BrowserPluginGuest::OnImeFinishComposingText(
     int browser_plugin_instance_id,
     bool keep_selection) {
   DCHECK_EQ(browser_plugin_instance_id_, browser_plugin_instance_id);
-  Send(new InputMsg_ImeFinishComposingText(routing_id(), keep_selection));
+  GetWebContents()
+      ->GetRenderViewHost()
+      ->GetWidget()
+      ->GetWidgetInputHandler()
+      ->ImeFinishComposingText(keep_selection);
 }
 
 void BrowserPluginGuest::OnExtendSelectionAndDelete(
@@ -990,8 +1022,11 @@
 void BrowserPluginGuest::OnSetEditCommandsForNextKeyEvent(
     int browser_plugin_instance_id,
     const std::vector<EditCommand>& edit_commands) {
-  Send(new InputMsg_SetEditCommandsForNextKeyEvent(routing_id(),
-                                                   edit_commands));
+  GetWebContents()
+      ->GetRenderViewHost()
+      ->GetWidget()
+      ->GetWidgetInputHandler()
+      ->SetEditCommandsForNextKeyEvent(edit_commands);
 }
 
 void BrowserPluginGuest::OnSetVisibility(int browser_plugin_instance_id,
diff --git a/content/browser/dom_storage/local_storage_context_mojo_unittest.cc b/content/browser/dom_storage/local_storage_context_mojo_unittest.cc
index 70e9cb4..902d97c 100644
--- a/content/browser/dom_storage/local_storage_context_mojo_unittest.cc
+++ b/content/browser/dom_storage/local_storage_context_mojo_unittest.cc
@@ -19,6 +19,7 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/local_storage_usage_info.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "content/public/test/test_utils.h"
 #include "content/test/mock_leveldb_database.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
 #include "mojo/public/cpp/bindings/binding.h"
@@ -787,10 +788,7 @@
                      const std::string& name) override {
     if (name == file::mojom::kServiceName) {
       file_service_context_.reset(new service_manager::ServiceContext(
-          file::CreateFileService(
-              BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE),
-              BrowserThread::GetTaskRunnerForThread(BrowserThread::DB)),
-          std::move(request)));
+          file::CreateFileService(), std::move(request)));
     }
   }
 
@@ -813,8 +811,7 @@
     : public service_manager::test::ServiceTest {
  public:
   LocalStorageContextMojoTestWithService()
-      : ServiceTest("content_unittests", false),
-        thread_bundle_(TestBrowserThreadBundle::REAL_FILE_THREAD) {}
+      : ServiceTest("content_unittests", false) {}
   ~LocalStorageContextMojoTestWithService() override {}
 
  protected:
@@ -868,7 +865,6 @@
   }
 
  private:
-  TestBrowserThreadBundle thread_bundle_;
   base::ScopedTempDir temp_path_;
 
   DISALLOW_COPY_AND_ASSIGN(LocalStorageContextMojoTestWithService);
@@ -1030,6 +1026,8 @@
   context->ShutdownAndDelete();
   context = nullptr;
   base::RunLoop().RunUntilIdle();
+  // Also flush Task Scheduler tasks to make sure the leveldb is fully closed.
+  content::RunAllBlockingPoolTasksUntilIdle();
 
   // Delete manifest files to mess up opening DB.
   base::FilePath db_path =
diff --git a/content/browser/frame_host/input/legacy_ipc_frame_input_handler.cc b/content/browser/frame_host/input/legacy_ipc_frame_input_handler.cc
index 51dc7f1..849d9c1 100644
--- a/content/browser/frame_host/input/legacy_ipc_frame_input_handler.cc
+++ b/content/browser/frame_host/input/legacy_ipc_frame_input_handler.cc
@@ -12,11 +12,8 @@
 namespace content {
 
 LegacyIPCFrameInputHandler::LegacyIPCFrameInputHandler(
-    RenderFrameHostImpl* frame_host,
-    int routing_id)
-    : frame_host_(frame_host), routing_id_(routing_id) {
-  DCHECK(frame_host);
-}
+    RenderFrameHostImpl* frame_host)
+    : frame_host_(frame_host), routing_id_(frame_host->GetRoutingID()) {}
 
 LegacyIPCFrameInputHandler::~LegacyIPCFrameInputHandler() {}
 
@@ -138,6 +135,16 @@
       base::MakeUnique<InputMsg_MoveRangeSelectionExtent>(routing_id_, extent));
 }
 
+void LegacyIPCFrameInputHandler::ScrollFocusedEditableNodeIntoRect(
+    const gfx::Rect& rect) {
+  SendInput(base::MakeUnique<InputMsg_ScrollFocusedEditableNodeIntoRect>(
+      routing_id_, rect));
+}
+
+void LegacyIPCFrameInputHandler::MoveCaret(const gfx::Point& point) {
+  SendInput(base::MakeUnique<InputMsg_MoveCaret>(routing_id_, point));
+}
+
 void LegacyIPCFrameInputHandler::SendInput(
     std::unique_ptr<IPC::Message> message) {
   static_cast<LegacyInputRouterImpl*>(
diff --git a/content/browser/frame_host/input/legacy_ipc_frame_input_handler.h b/content/browser/frame_host/input/legacy_ipc_frame_input_handler.h
index 6ea79e8..7a10e51 100644
--- a/content/browser/frame_host/input/legacy_ipc_frame_input_handler.h
+++ b/content/browser/frame_host/input/legacy_ipc_frame_input_handler.h
@@ -17,9 +17,10 @@
 class CONTENT_EXPORT LegacyIPCFrameInputHandler
     : public mojom::FrameInputHandler {
  public:
-  LegacyIPCFrameInputHandler(RenderFrameHostImpl* frame_host, int routing_id);
+  explicit LegacyIPCFrameInputHandler(RenderFrameHostImpl* frame_host);
   ~LegacyIPCFrameInputHandler() override;
 
+  // mojom::FrameInputHandler overrides.
   void SetCompositionFromExistingText(
       int32_t start,
       int32_t end,
@@ -46,6 +47,8 @@
   void SelectRange(const gfx::Point& base, const gfx::Point& extent) override;
   void AdjustSelectionByCharacterOffset(int32_t start, int32_t end) override;
   void MoveRangeSelectionExtent(const gfx::Point& extent) override;
+  void ScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect) override;
+  void MoveCaret(const gfx::Point& point) override;
 
  private:
   void SendInput(std::unique_ptr<IPC::Message> message);
diff --git a/content/browser/frame_host/interstitial_page_impl.cc b/content/browser/frame_host/interstitial_page_impl.cc
index d41d52b..96c4267 100644
--- a/content/browser/frame_host/interstitial_page_impl.cc
+++ b/content/browser/frame_host/interstitial_page_impl.cc
@@ -442,6 +442,18 @@
   RecordAction(base::UserMetricsAction("Cut"));
 }
 
+void InterstitialPageImpl::ExecuteEditCommand(
+    const std::string& command,
+    const base::Optional<base::string16>& value) {
+  FrameTreeNode* focused_node = frame_tree_->GetFocusedFrame();
+  if (!focused_node)
+    return;
+
+  focused_node->current_frame_host()
+      ->GetFrameInputHandler()
+      ->ExecuteEditCommand(command, value);
+}
+
 void InterstitialPageImpl::Copy() {
   FrameTreeNode* focused_node = frame_tree_->GetFocusedFrame();
   if (!focused_node)
diff --git a/content/browser/frame_host/interstitial_page_impl.h b/content/browser/frame_host/interstitial_page_impl.h
index 2fd048a..cbab206 100644
--- a/content/browser/frame_host/interstitial_page_impl.h
+++ b/content/browser/frame_host/interstitial_page_impl.h
@@ -115,6 +115,8 @@
                    base::i18n::TextDirection title_direction) override;
   InterstitialPage* GetAsInterstitialPage() override;
   AccessibilityMode GetAccessibilityMode() const override;
+  void ExecuteEditCommand(const std::string& command,
+                          const base::Optional<base::string16>& value) override;
   void Cut() override;
   void Copy() override;
   void Paste() override;
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 1f3d428..0a39d52 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -786,11 +786,7 @@
 }
 
 bool RenderFrameHostImpl::Send(IPC::Message* message) {
-  if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) {
-    return GetRenderWidgetHost()->input_router()->SendInput(
-        base::WrapUnique(message));
-  }
-
+  DCHECK(IPC_MESSAGE_ID_CLASS(message->type()) != InputMsgStart);
   return GetProcess()->Send(message);
 }
 
@@ -3333,8 +3329,7 @@
   if (base::FeatureList::IsEnabled(features::kMojoInputMessages)) {
     GetRemoteInterfaces()->GetInterface(&frame_input_handler_);
   } else {
-    legacy_frame_input_handler_.reset(
-        new LegacyIPCFrameInputHandler(this, routing_id_));
+    legacy_frame_input_handler_.reset(new LegacyIPCFrameInputHandler(this));
   }
 }
 
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index b326ec43..0ee5e67 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -40,6 +40,7 @@
 #include "content/common/frame_message_enums.h"
 #include "content/common/frame_replication_state.h"
 #include "content/common/image_downloader/image_downloader.mojom.h"
+#include "content/common/input/input_handler.mojom.h"
 #include "content/common/navigation_params.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/common/javascript_dialog_type.h"
@@ -231,7 +232,7 @@
       GURL* blocked_url,
       SourceLocation* source_location) const override;
 
-  mojom::FrameInputHandler* GetFrameInputHandler() override;
+  mojom::FrameInputHandler* GetFrameInputHandler();
 
   // Creates a RenderFrame in the renderer process.
   bool CreateRenderFrame(int proxy_routing_id,
diff --git a/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
index e6e38c2..de272050 100644
--- a/content/browser/frame_host/render_frame_host_manager_browsertest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
@@ -2655,7 +2655,7 @@
   // message.
   RenderProcessHostWatcher watcher(
       rvh->GetProcess(), RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT);
-  rvh->Send(new InputMsg_SetFocus(rvh->GetRoutingID(), true));
+  rvh->GetWidget()->GetWidgetInputHandler()->SetFocus(true);
 
   // The test must wait for a process to exit, but if the IPC message is
   // properly ignored, there will be no crash. Therefore, navigate the
diff --git a/content/browser/frame_host/render_widget_host_view_child_frame_unittest.cc b/content/browser/frame_host/render_widget_host_view_child_frame_unittest.cc
index ceb9813..f85b047 100644
--- a/content/browser/frame_host/render_widget_host_view_child_frame_unittest.cc
+++ b/content/browser/frame_host/render_widget_host_view_child_frame_unittest.cc
@@ -47,6 +47,10 @@
   MockRenderWidgetHostDelegate() {}
   ~MockRenderWidgetHostDelegate() override {}
  private:
+  void ExecuteEditCommand(
+      const std::string& command,
+      const base::Optional<base::string16>& value) override {}
+
   void Cut() override {}
   void Copy() override {}
   void Paste() override {}
diff --git a/content/browser/frame_host/render_widget_host_view_guest_unittest.cc b/content/browser/frame_host/render_widget_host_view_guest_unittest.cc
index 0453cdd2..2e2a4cd0 100644
--- a/content/browser/frame_host/render_widget_host_view_guest_unittest.cc
+++ b/content/browser/frame_host/render_widget_host_view_guest_unittest.cc
@@ -41,6 +41,9 @@
 
  private:
   // RenderWidgetHostDelegate:
+  void ExecuteEditCommand(
+      const std::string& command,
+      const base::Optional<base::string16>& value) override {}
   void Cut() override {}
   void Copy() override {}
   void Paste() override {}
diff --git a/content/browser/indexed_db/indexed_db_database.cc b/content/browser/indexed_db/indexed_db_database.cc
index 642ed4d..dc061a7 100644
--- a/content/browser/indexed_db/indexed_db_database.cc
+++ b/content/browser/indexed_db/indexed_db_database.cc
@@ -1930,6 +1930,16 @@
   metadata_.version = previous_version;
 }
 
+void IndexedDBDatabase::AbortAllTransactionsForConnections() {
+  IDB_TRACE("IndexedDBDatabase::AbortAllTransactionsForConnections");
+
+  for (IndexedDBConnection* connection : connections_) {
+    connection->AbortAllTransactions(
+        IndexedDBDatabaseError(blink::kWebIDBDatabaseExceptionUnknownError,
+                               "Database is compacting."));
+  }
+}
+
 void IndexedDBDatabase::ReportError(leveldb::Status status) {
   DCHECK(!status.ok());
   if (status.IsCorruption()) {
diff --git a/content/browser/indexed_db/indexed_db_database.h b/content/browser/indexed_db/indexed_db_database.h
index 1203e8b..b7e42cfc 100644
--- a/content/browser/indexed_db/indexed_db_database.h
+++ b/content/browser/indexed_db/indexed_db_database.h
@@ -137,6 +137,8 @@
   void TransactionCreated(IndexedDBTransaction* transaction);
   void TransactionFinished(IndexedDBTransaction* transaction, bool committed);
 
+  void AbortAllTransactionsForConnections();
+
   void AddPendingObserver(IndexedDBTransaction* transaction,
                           int32_t observer_id,
                           const IndexedDBObserver::Options& options);
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host.cc b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
index fb4f1dfa..6c09172 100644
--- a/content/browser/indexed_db/indexed_db_dispatcher_host.cc
+++ b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
@@ -4,6 +4,8 @@
 
 #include "content/browser/indexed_db/indexed_db_dispatcher_host.h"
 
+#include <utility>
+
 #include "base/bind.h"
 #include "base/files/file_path.h"
 #include "base/guid.h"
@@ -33,6 +35,28 @@
   return !origin.unique();
 }
 
+void DoCallStatusCallback(
+    IndexedDBDispatcherHost::AbortTransactionsAndCompactDatabaseCallback
+        callback,
+    leveldb::Status status) {
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+  if (status.ok())
+    std::move(callback).Run(::indexed_db::mojom::CompactionStatus::OK);
+  else
+    std::move(callback).Run(::indexed_db::mojom::CompactionStatus::Error);
+}
+
+void CallStatusCallbackOnIOThread(
+    scoped_refptr<base::SequencedTaskRunner> io_runner,
+    IndexedDBDispatcherHost::AbortTransactionsAndCompactDatabaseCallback
+        mojo_callback,
+    leveldb::Status status) {
+  io_runner->PostTask(
+      FROM_HERE,
+      base::BindOnce(&DoCallStatusCallback, std::move(mojo_callback), status));
+}
+
 }  // namespace
 
 class IndexedDBDispatcherHost::IDBSequenceHelper {
@@ -59,6 +83,9 @@
                                  const url::Origin& origin,
                                  const base::string16& name,
                                  bool force_close);
+  void AbortTransactionsAndCompactDatabaseOnIDBThread(
+      base::OnceCallback<void(leveldb::Status)> callback,
+      const url::Origin& origin);
 
  private:
   const int ipc_process_id_;
@@ -229,6 +256,27 @@
                      origin, name, force_close));
 }
 
+void IndexedDBDispatcherHost::AbortTransactionsAndCompactDatabase(
+    const url::Origin& origin,
+    AbortTransactionsAndCompactDatabaseCallback mojo_callback) {
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+  if (!IsValidOrigin(origin)) {
+    mojo::ReportBadMessage(kInvalidOrigin);
+    return;
+  }
+
+  base::OnceCallback<void(leveldb::Status)> callback_on_io = base::BindOnce(
+      &CallStatusCallbackOnIOThread, base::ThreadTaskRunnerHandle::Get(),
+      std::move(mojo_callback));
+  idb_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(
+          &IDBSequenceHelper::AbortTransactionsAndCompactDatabaseOnIDBThread,
+          base::Unretained(idb_helper_), base::Passed(&callback_on_io),
+          origin));
+}
+
 void IndexedDBDispatcherHost::InvalidateWeakPtrsAndClearBindings() {
   weak_factory_.InvalidateWeakPtrs();
   cursor_bindings_.CloseAllBindings();
@@ -284,4 +332,14 @@
       force_close);
 }
 
+void IndexedDBDispatcherHost::IDBSequenceHelper::
+    AbortTransactionsAndCompactDatabaseOnIDBThread(
+        base::OnceCallback<void(leveldb::Status)> callback,
+        const url::Origin& origin) {
+  DCHECK(indexed_db_context_->TaskRunner()->RunsTasksInCurrentSequence());
+
+  indexed_db_context_->GetIDBFactory()->AbortTransactionsAndCompactDatabase(
+      std::move(callback), origin);
+}
+
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host.h b/content/browser/indexed_db/indexed_db_dispatcher_host.h
index c56d8c2..67f24ab4 100644
--- a/content/browser/indexed_db/indexed_db_dispatcher_host.h
+++ b/content/browser/indexed_db/indexed_db_dispatcher_host.h
@@ -106,6 +106,9 @@
       const url::Origin& origin,
       const base::string16& name,
       bool force_close) override;
+  void AbortTransactionsAndCompactDatabase(
+      const url::Origin& origin,
+      AbortTransactionsAndCompactDatabaseCallback callback) override;
 
   void InvalidateWeakPtrsAndClearBindings();
 
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host_unittest.cc b/content/browser/indexed_db/indexed_db_dispatcher_host_unittest.cc
index a73e010..b2d98b3 100644
--- a/content/browser/indexed_db/indexed_db_dispatcher_host_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_dispatcher_host_unittest.cc
@@ -125,6 +125,13 @@
   DISALLOW_COPY_AND_ASSIGN(TestDatabaseConnection);
 };
 
+void CompactionStatusCallback(const base::Closure& callback,
+                              ::indexed_db::mojom::CompactionStatus* status_out,
+                              ::indexed_db::mojom::CompactionStatus status) {
+  *status_out = status;
+  callback.Run();
+}
+
 }  // namespace
 
 class IndexedDBDispatcherHostTest : public testing::Test {
@@ -442,4 +449,188 @@
   }
 }
 
+TEST_F(IndexedDBDispatcherHostTest, CompactDatabaseWithConnection) {
+  const int64_t kDBVersion = 1;
+  const int64_t kTransactionId = 1;
+
+  // Open connection.
+  TestDatabaseConnection connection(url::Origin(GURL(kOrigin)),
+                                    base::UTF8ToUTF16(kDatabaseName),
+                                    kDBVersion, kTransactionId);
+  IndexedDBDatabaseMetadata metadata;
+  DatabaseAssociatedPtrInfo database_info;
+  {
+    base::RunLoop loop;
+    EXPECT_CALL(
+        *connection.open_callbacks,
+        MockedUpgradeNeeded(IsAssociatedInterfacePtrInfoValid(true),
+                            IndexedDBDatabaseMetadata::NO_VERSION,
+                            blink::kWebIDBDataLossNone, std::string(), _))
+        .WillOnce(testing::DoAll(MoveArg<0>(&database_info),
+                                 testing::SaveArg<4>(&metadata),
+                                 RunClosure(loop.QuitClosure())));
+
+    // Queue open request message.
+    connection.Open(idb_mojo_factory_.get());
+    loop.Run();
+  }
+
+  EXPECT_TRUE(database_info.is_valid());
+  EXPECT_EQ(connection.version, metadata.version);
+  EXPECT_EQ(connection.db_name, metadata.name);
+
+  connection.database.Bind(std::move(database_info));
+
+  ::indexed_db::mojom::CompactionStatus callback_result =
+      ::indexed_db::mojom::CompactionStatus::Error;
+  {
+    ::testing::InSequence dummy;
+    base::RunLoop loop;
+    base::Closure quit_closure = base::BarrierClosure(3, loop.QuitClosure());
+    const url::Origin origin = url::Origin(GURL(kOrigin));
+
+    EXPECT_CALL(*connection.connection_callbacks, Complete(kTransactionId))
+        .Times(1)
+        .WillOnce(RunClosure(quit_closure));
+    EXPECT_CALL(
+        *connection.open_callbacks,
+        MockedSuccessDatabase(IsAssociatedInterfacePtrInfoValid(false), _))
+        .Times(1)
+        .WillOnce(RunClosure(quit_closure));
+
+    connection.database->Commit(kTransactionId);
+    idb_mojo_factory_->AbortTransactionsAndCompactDatabase(
+        origin, base::BindOnce(&CompactionStatusCallback,
+                               std::move(quit_closure), &callback_result));
+
+    loop.Run();
+  }
+  EXPECT_EQ(::indexed_db::mojom::CompactionStatus::OK, callback_result);
+}
+
+TEST_F(IndexedDBDispatcherHostTest, CompactDatabaseWhileDoingTransaction) {
+  const int64_t kDBVersion = 1;
+  const int64_t kTransactionId = 1;
+  const int64_t kObjectStoreId = 10;
+  const char kObjectStoreName[] = "os";
+
+  // Open connection.
+  TestDatabaseConnection connection(url::Origin(GURL(kOrigin)),
+                                    base::UTF8ToUTF16(kDatabaseName),
+                                    kDBVersion, kTransactionId);
+  IndexedDBDatabaseMetadata metadata;
+  DatabaseAssociatedPtrInfo database_info;
+  {
+    base::RunLoop loop;
+    EXPECT_CALL(
+        *connection.open_callbacks,
+        MockedUpgradeNeeded(IsAssociatedInterfacePtrInfoValid(true),
+                            IndexedDBDatabaseMetadata::NO_VERSION,
+                            blink::kWebIDBDataLossNone, std::string(), _))
+        .WillOnce(testing::DoAll(MoveArg<0>(&database_info),
+                                 testing::SaveArg<4>(&metadata),
+                                 RunClosure(loop.QuitClosure())));
+
+    // Queue open request message.
+    connection.Open(idb_mojo_factory_.get());
+    loop.Run();
+  }
+
+  EXPECT_TRUE(database_info.is_valid());
+  EXPECT_EQ(connection.version, metadata.version);
+  EXPECT_EQ(connection.db_name, metadata.name);
+
+  connection.database.Bind(std::move(database_info));
+
+  ::indexed_db::mojom::CompactionStatus callback_result =
+      ::indexed_db::mojom::CompactionStatus::Error;
+  {
+    ::testing::InSequence dummy;
+    base::RunLoop loop;
+    base::Closure quit_closure = base::BarrierClosure(3, loop.QuitClosure());
+    const url::Origin origin = url::Origin(GURL(kOrigin));
+
+    EXPECT_CALL(
+        *connection.connection_callbacks,
+        Abort(kTransactionId, blink::kWebIDBDatabaseExceptionUnknownError, _))
+        .Times(1)
+        .WillOnce(RunClosure(quit_closure));
+    EXPECT_CALL(*connection.open_callbacks,
+                Error(blink::kWebIDBDatabaseExceptionAbortError, _))
+        .Times(1)
+        .WillOnce(RunClosure(quit_closure));
+
+    ASSERT_TRUE(connection.database.is_bound());
+    connection.database->CreateObjectStore(kTransactionId, kObjectStoreId,
+                                           base::UTF8ToUTF16(kObjectStoreName),
+                                           content::IndexedDBKeyPath(), false);
+    idb_mojo_factory_->AbortTransactionsAndCompactDatabase(
+        origin, base::BindOnce(&CompactionStatusCallback,
+                               std::move(quit_closure), &callback_result));
+
+    loop.Run();
+  }
+  EXPECT_EQ(::indexed_db::mojom::CompactionStatus::OK, callback_result);
+}
+
+TEST_F(IndexedDBDispatcherHostTest, CompactDatabaseWhileUpgrading) {
+  const int64_t kDBVersion = 1;
+  const int64_t kTransactionId = 1;
+
+  // Open connection.
+  TestDatabaseConnection connection(url::Origin(GURL(kOrigin)),
+                                    base::UTF8ToUTF16(kDatabaseName),
+                                    kDBVersion, kTransactionId);
+  IndexedDBDatabaseMetadata metadata;
+  DatabaseAssociatedPtrInfo database_info;
+  {
+    base::RunLoop loop;
+    EXPECT_CALL(
+        *connection.open_callbacks,
+        MockedUpgradeNeeded(IsAssociatedInterfacePtrInfoValid(true),
+                            IndexedDBDatabaseMetadata::NO_VERSION,
+                            blink::kWebIDBDataLossNone, std::string(), _))
+        .WillOnce(testing::DoAll(MoveArg<0>(&database_info),
+                                 testing::SaveArg<4>(&metadata),
+                                 RunClosure(loop.QuitClosure())));
+
+    // Queue open request message.
+    connection.Open(idb_mojo_factory_.get());
+    loop.Run();
+  }
+
+  EXPECT_TRUE(database_info.is_valid());
+  EXPECT_EQ(connection.version, metadata.version);
+  EXPECT_EQ(connection.db_name, metadata.name);
+
+  connection.database.Bind(std::move(database_info));
+
+  ::indexed_db::mojom::CompactionStatus callback_result =
+      ::indexed_db::mojom::CompactionStatus::Error;
+  {
+    ::testing::InSequence dummy;
+    base::RunLoop loop;
+    base::Closure quit_closure = base::BarrierClosure(3, loop.QuitClosure());
+    const url::Origin origin = url::Origin(GURL(kOrigin));
+
+    EXPECT_CALL(
+        *connection.connection_callbacks,
+        Abort(kTransactionId, blink::kWebIDBDatabaseExceptionUnknownError, _))
+        .Times(1)
+        .WillOnce(RunClosure(quit_closure));
+    EXPECT_CALL(*connection.open_callbacks,
+                Error(blink::kWebIDBDatabaseExceptionAbortError, _))
+        .Times(1)
+        .WillOnce(RunClosure(quit_closure));
+
+    ASSERT_TRUE(connection.database.is_bound());
+    idb_mojo_factory_->AbortTransactionsAndCompactDatabase(
+        origin, base::BindOnce(&CompactionStatusCallback,
+                               std::move(quit_closure), &callback_result));
+
+    loop.Run();
+  }
+  EXPECT_EQ(::indexed_db::mojom::CompactionStatus::OK, callback_result);
+}
+
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_factory.h b/content/browser/indexed_db/indexed_db_factory.h
index 40f2d64c..00c6a72 100644
--- a/content/browser/indexed_db/indexed_db_factory.h
+++ b/content/browser/indexed_db/indexed_db_factory.h
@@ -64,6 +64,10 @@
       const base::FilePath& data_directory,
       bool force_close) = 0;
 
+  virtual void AbortTransactionsAndCompactDatabase(
+      base::OnceCallback<void(leveldb::Status)> callback,
+      const url::Origin& origin) = 0;
+
   virtual void HandleBackingStoreFailure(const url::Origin& origin) = 0;
   virtual void HandleBackingStoreCorruption(
       const url::Origin& origin,
diff --git a/content/browser/indexed_db/indexed_db_factory_impl.cc b/content/browser/indexed_db/indexed_db_factory_impl.cc
index b6687744..c06e8dc9 100644
--- a/content/browser/indexed_db/indexed_db_factory_impl.cc
+++ b/content/browser/indexed_db/indexed_db_factory_impl.cc
@@ -297,6 +297,38 @@
   context_->DatabaseDeleted(identifier.first);
 }
 
+void IndexedDBFactoryImpl::AbortTransactionsAndCompactDatabase(
+    base::OnceCallback<void(leveldb::Status)> callback,
+    const url::Origin& origin) {
+  IDB_TRACE("IndexedDBFactoryImpl::AbortTransactionsAndCompactDatabase");
+  const scoped_refptr<IndexedDBBackingStore>& backing_store =
+      backing_store_map_[origin];
+  if (!backing_store) {
+    std::move(callback).Run(leveldb::Status::IOError(
+        "Internal error opening backing store for "
+        "indexedDB.abortTransactionsAndCompactDatabase."));
+    return;
+  }
+
+  leveldb::Status get_names_status;
+  std::vector<base::string16> db_names =
+      backing_store->GetDatabaseNames(&get_names_status);
+  if (!get_names_status.ok()) {
+    std::move(callback).Run(leveldb::Status::IOError(
+        "Internal error getting origin database names for "
+        "indexedDB.abortTransactionsAndCompactDatabase."));
+    return;
+  }
+  for (base::string16& name : db_names) {
+    const scoped_refptr<IndexedDBDatabase>& db =
+        database_map_[std::make_pair(origin, name)];
+    db->AbortAllTransactionsForConnections();
+  }
+
+  backing_store->Compact();
+  std::move(callback).Run(leveldb::Status::OK());
+}
+
 void IndexedDBFactoryImpl::HandleBackingStoreFailure(const Origin& origin) {
   // NULL after ContextDestroyed() called, and in some unit tests.
   if (!context_)
diff --git a/content/browser/indexed_db/indexed_db_factory_impl.h b/content/browser/indexed_db/indexed_db_factory_impl.h
index 12617f8..ecb2a54 100644
--- a/content/browser/indexed_db/indexed_db_factory_impl.h
+++ b/content/browser/indexed_db/indexed_db_factory_impl.h
@@ -51,6 +51,10 @@
       const base::FilePath& data_directory,
       bool force_close) override;
 
+  void AbortTransactionsAndCompactDatabase(
+      base::OnceCallback<void(leveldb::Status)> callback,
+      const url::Origin& origin) override;
+
   void HandleBackingStoreFailure(const url::Origin& origin) override;
   void HandleBackingStoreCorruption(
       const url::Origin& origin,
diff --git a/content/browser/indexed_db/mock_indexed_db_factory.h b/content/browser/indexed_db/mock_indexed_db_factory.h
index a94314c..54ec4fd 100644
--- a/content/browser/indexed_db/mock_indexed_db_factory.h
+++ b/content/browser/indexed_db/mock_indexed_db_factory.h
@@ -53,6 +53,16 @@
            const url::Origin& origin,
            const base::FilePath& data_directory,
            bool force_close));
+  MOCK_METHOD2(AbortTransactionsAndCompactDatabaseProxy,
+               void(base::OnceCallback<void(leveldb::Status)>* callback,
+                    const url::Origin& origin));
+  virtual void AbortTransactionsAndCompactDatabase(
+      base::OnceCallback<void(leveldb::Status)> callback,
+      const url::Origin& origin) {
+    base::OnceCallback<void(leveldb::Status)>* callback_ref = &callback;
+    AbortTransactionsAndCompactDatabaseProxy(callback_ref, origin);
+  }
+
   MOCK_METHOD1(HandleBackingStoreFailure, void(const url::Origin& origin));
   MOCK_METHOD2(HandleBackingStoreCorruption,
                void(const url::Origin& origin,
diff --git a/content/browser/loader/mime_sniffing_resource_handler.cc b/content/browser/loader/mime_sniffing_resource_handler.cc
index 11adad4..1f51261 100644
--- a/content/browser/loader/mime_sniffing_resource_handler.cc
+++ b/content/browser/loader/mime_sniffing_resource_handler.cc
@@ -545,10 +545,8 @@
   std::unique_ptr<ResourceHandler> handler(host_->MaybeInterceptAsStream(
       plugin_path, request(), response_.get(), &payload));
   if (handler) {
-    if (!CheckResponseIsNotProvisional()) {
-      Cancel();
+    if (!CheckResponseIsNotProvisional())
       return false;
-    }
     *handled_by_plugin = true;
     intercepting_handler_->UseNewHandler(std::move(handler), payload);
   }
@@ -577,7 +575,7 @@
   // download.
   // TODO(abarth): We should abstract the response_code test, but this kind
   // of check is scattered throughout our codebase.
-  request()->CancelWithError(net::ERR_INVALID_RESPONSE);
+  CancelWithError(net::ERR_INVALID_RESPONSE);
   return false;
 }
 
diff --git a/content/browser/power_monitor_browsertest.cc b/content/browser/power_monitor_browsertest.cc
index e7e09fae..1842da3 100644
--- a/content/browser/power_monitor_browsertest.cc
+++ b/content/browser/power_monitor_browsertest.cc
@@ -7,6 +7,7 @@
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "content/public/browser/browser_thread.h"
+#include "content/public/browser/gpu_service_registry.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/utility_process_host.h"
@@ -49,6 +50,10 @@
   BindInterface(host, std::move(request));
 }
 
+void BindInterfaceForGpuOnIOThread(mojom::PowerMonitorTestRequest request) {
+  BindInterfaceInGpuProcess(std::move(request));
+}
+
 class MockPowerMonitorMessageBroadcaster : public device::mojom::PowerMonitor {
  public:
   MockPowerMonitorMessageBroadcaster() = default;
@@ -86,13 +91,15 @@
  public:
   PowerMonitorTest() = default;
 
-  void SetUpOnMainThread() override {
+  void SetUp() override {
     // Because Device Service also runs in this process(browser process), we can
     // set our binder to intercept requests for PowerMonitor interface to it.
     service_manager::ServiceContext::SetGlobalBinderForTesting(
         device::mojom::kServiceName, device::mojom::PowerMonitor::Name_,
         base::Bind(&PowerMonitorTest::BindPowerMonitor,
                    base::Unretained(this)));
+
+    ContentBrowserTest::SetUp();
   }
 
   void BindPowerMonitor(const service_manager::BindSourceInfo& source_info,
@@ -108,6 +115,19 @@
 
       DCHECK(utility_bound_closure_);
       std::move(utility_bound_closure_).Run();
+    } else if (source_info.identity.name() == mojom::kGpuServiceName) {
+      ++request_count_from_gpu_;
+
+      // We ignore null gpu_bound_closure_ here for two possible scenarios:
+      //  - TestRendererProcess and TestUtilityProcess also result in spinning
+      //    up GPU processes as a side effect, but they do not set valid
+      //    gpu_bound_closure_.
+      //  - As GPU process is started during setup of browser test suite, so
+      //    it's possible that TestGpuProcess execution may have not started
+      //    yet when the PowerMonitor bind request comes here, in such case
+      //    gpu_bound_closure_ will also be null.
+      if (gpu_bound_closure_)
+        std::move(gpu_bound_closure_).Run();
     }
 
     power_monitor_message_broadcaster_.Bind(
@@ -128,8 +148,13 @@
     renderer_bound_closure_ = closure;
   }
 
+  void set_gpu_bound_closure(base::Closure closure) {
+    gpu_bound_closure_ = closure;
+  }
+
   int request_count_from_renderer() { return request_count_from_renderer_; }
   int request_count_from_utility() { return request_count_from_utility_; }
+  int request_count_from_gpu() { return request_count_from_gpu_; }
 
   void SimulatePowerStateChange(bool on_battery_power) {
     power_monitor_message_broadcaster_.OnPowerStateChange(on_battery_power);
@@ -138,7 +163,9 @@
  private:
   int request_count_from_renderer_ = 0;
   int request_count_from_utility_ = 0;
+  int request_count_from_gpu_ = 0;
   base::OnceClosure renderer_bound_closure_;
+  base::OnceClosure gpu_bound_closure_;
   base::OnceClosure utility_bound_closure_;
 
   MockPowerMonitorMessageBroadcaster power_monitor_message_broadcaster_;
@@ -186,6 +213,35 @@
   VerifyPowerStateInChildProcess(power_monitor_utility.get(), false);
 }
 
+IN_PROC_BROWSER_TEST_F(PowerMonitorTest, TestGpuProcess) {
+  // As gpu process is started automatically during the setup period of browser
+  // test suite, it may have already started and bound PowerMonitor interface to
+  // Device Service before execution of this TestGpuProcess test. So here we
+  // do not wait for the connection if we found it has already been established.
+  if (request_count_from_gpu() != 1) {
+    ASSERT_EQ(0, request_count_from_gpu());
+    base::RunLoop run_loop;
+    set_gpu_bound_closure(run_loop.QuitClosure());
+    // Wait for the connection from gpu process.
+    run_loop.Run();
+  }
+  EXPECT_EQ(1, request_count_from_gpu());
+
+  mojom::PowerMonitorTestPtr power_monitor_gpu;
+  BrowserThread::PostTask(
+      BrowserThread::IO, FROM_HERE,
+      base::BindOnce(&BindInterfaceForGpuOnIOThread,
+                     mojo::MakeRequest(&power_monitor_gpu)));
+
+  SimulatePowerStateChange(true);
+  // Verify gpu process on_battery_power changed to true.
+  VerifyPowerStateInChildProcess(power_monitor_gpu.get(), true);
+
+  SimulatePowerStateChange(false);
+  // Verify gpu process on_battery_power changed to false.
+  VerifyPowerStateInChildProcess(power_monitor_gpu.get(), false);
+}
+
 }  //  namespace
 
 }  //  namespace content
diff --git a/content/browser/renderer_host/input/input_device_change_observer.cc b/content/browser/renderer_host/input/input_device_change_observer.cc
index 704b40c..e0b66d9 100644
--- a/content/browser/renderer_host/input/input_device_change_observer.cc
+++ b/content/browser/renderer_host/input/input_device_change_observer.cc
@@ -4,15 +4,12 @@
 
 #include "content/browser/renderer_host/input/input_device_change_observer.h"
 #include "base/trace_event/trace_event.h"
-#include "build/build_config.h"
 #include "content/public/common/web_preferences.h"
 
 #if defined(OS_WIN)
 #include "ui/events/devices/input_device_observer_win.h"
 #elif defined(OS_LINUX)
 #include "ui/events/devices/input_device_manager.h"
-#elif defined(OS_ANDROID)
-#include "ui/events/devices/input_device_observer_android.h"
 #endif
 
 namespace content {
@@ -23,8 +20,6 @@
   ui::InputDeviceObserverWin::GetInstance()->AddObserver(this);
 #elif defined(OS_LINUX)
   ui::InputDeviceManager::GetInstance()->AddObserver(this);
-#elif defined(OS_ANDROID)
-  ui::InputDeviceObserverAndroid::GetInstance()->AddObserver(this);
 #endif
 }
 
@@ -33,8 +28,6 @@
   ui::InputDeviceObserverWin::GetInstance()->RemoveObserver(this);
 #elif defined(OS_LINUX)
   ui::InputDeviceManager::GetInstance()->RemoveObserver(this);
-#elif defined(OS_ANDROID)
-  ui::InputDeviceObserverAndroid::GetInstance()->RemoveObserver(this);
 #endif
   render_view_host_ = nullptr;
 }
diff --git a/content/browser/renderer_host/input/input_router.h b/content/browser/renderer_host/input/input_router.h
index d26541b..47e3b0c 100644
--- a/content/browser/renderer_host/input/input_router.h
+++ b/content/browser/renderer_host/input/input_router.h
@@ -30,11 +30,6 @@
 
   ~InputRouter() override {}
 
-  // Send and take ownership of the the given InputMsg_*. This should be used
-  // only for event types not associated with a WebInputEvent.  Returns true on
-  // success and false otherwise.
-  virtual bool SendInput(std::unique_ptr<IPC::Message> message) = 0;
-
   // WebInputEvents
   virtual void SendMouseEvent(
       const MouseEventWithLatencyInfo& mouse_event) = 0;
diff --git a/content/browser/renderer_host/input/interaction_mq_dynamic_browsertest.cc b/content/browser/renderer_host/input/interaction_mq_dynamic_browsertest.cc
index 6125b87..013f8c4 100644
--- a/content/browser/renderer_host/input/interaction_mq_dynamic_browsertest.cc
+++ b/content/browser/renderer_host/input/interaction_mq_dynamic_browsertest.cc
@@ -4,7 +4,6 @@
 
 #include "base/macros.h"
 #include "base/strings/utf_string_conversions.h"
-#include "build/build_config.h"
 #include "content/browser/renderer_host/render_view_host_impl.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test_utils.h"
@@ -26,7 +25,7 @@
 
 }  //  namespace
 
-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID)
+#if defined(OS_WIN) || defined(OS_LINUX)
 IN_PROC_BROWSER_TEST_F(InteractionMediaQueriesDynamicTest,
                        PointerMediaQueriesDynamic) {
   GURL test_url = GetTestUrl("", "interaction-mq-dynamic.html");
diff --git a/content/browser/renderer_host/input/legacy_input_router_impl.h b/content/browser/renderer_host/input/legacy_input_router_impl.h
index a285754..bd3189b 100644
--- a/content/browser/renderer_host/input/legacy_input_router_impl.h
+++ b/content/browser/renderer_host/input/legacy_input_router_impl.h
@@ -58,8 +58,9 @@
                         const Config& config);
   ~LegacyInputRouterImpl() override;
 
+  bool SendInput(std::unique_ptr<IPC::Message> message);
+
   // InputRouter
-  bool SendInput(std::unique_ptr<IPC::Message> message) override;
   void SendMouseEvent(const MouseEventWithLatencyInfo& mouse_event) override;
   void SendWheelEvent(
       const MouseWheelEventWithLatencyInfo& wheel_event) override;
@@ -80,6 +81,8 @@
 
   cc::TouchAction AllowedTouchAction() override;
 
+  int routing_id() const { return routing_id_; }
+
  private:
   friend class LegacyInputRouterImplTest;
   FRIEND_TEST_ALL_PREFIXES(SitePerProcessBrowserTest,
@@ -194,8 +197,6 @@
   // non-zero touch timeout configuration.
   void UpdateTouchAckTimeoutEnabled();
 
-  int routing_id() const { return routing_id_; }
-
   IPC::Sender* sender_;
   InputRouterClient* client_;
   InputAckHandler* ack_handler_;
diff --git a/content/browser/renderer_host/input/legacy_ipc_widget_input_handler.cc b/content/browser/renderer_host/input/legacy_ipc_widget_input_handler.cc
new file mode 100644
index 0000000..fa69e4ad
--- /dev/null
+++ b/content/browser/renderer_host/input/legacy_ipc_widget_input_handler.cc
@@ -0,0 +1,117 @@
+// 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 "content/browser/renderer_host/input/legacy_ipc_widget_input_handler.h"
+
+#include "base/strings/utf_string_conversions.h"
+#include "build/build_config.h"
+#include "content/browser/renderer_host/input/legacy_input_router_impl.h"
+#include "content/browser/renderer_host/render_widget_host_impl.h"
+#include "content/common/input_messages.h"
+
+namespace content {
+
+namespace {
+std::vector<blink::WebCompositionUnderline> ConvertToBlinkUnderline(
+    const std::vector<ui::CompositionUnderline>& ui_underlines) {
+  std::vector<blink::WebCompositionUnderline> underlines;
+  for (const auto& underline : ui_underlines) {
+    underlines.emplace_back(blink::WebCompositionUnderline(
+        underline.start_offset, underline.end_offset, underline.color,
+        underline.thick, underline.background_color));
+  }
+  return underlines;
+}
+
+}  // namespace
+
+LegacyIPCWidgetInputHandler::LegacyIPCWidgetInputHandler(
+    LegacyInputRouterImpl* input_router)
+    : input_router_(input_router) {}
+
+LegacyIPCWidgetInputHandler::~LegacyIPCWidgetInputHandler() {}
+
+void LegacyIPCWidgetInputHandler::SetFocus(bool focused) {
+  SendInput(base::MakeUnique<InputMsg_SetFocus>(input_router_->routing_id(),
+                                                focused));
+}
+
+void LegacyIPCWidgetInputHandler::MouseCaptureLost() {}
+
+void LegacyIPCWidgetInputHandler::SetEditCommandsForNextKeyEvent(
+    const std::vector<EditCommand>& commands) {
+  SendInput(base::MakeUnique<InputMsg_SetEditCommandsForNextKeyEvent>(
+      input_router_->routing_id(), commands));
+}
+
+void LegacyIPCWidgetInputHandler::CursorVisibilityChanged(bool visible) {
+  SendInput(base::MakeUnique<InputMsg_CursorVisibilityChange>(
+      input_router_->routing_id(), visible));
+}
+
+void LegacyIPCWidgetInputHandler::ImeSetComposition(
+    const base::string16& text,
+    const std::vector<ui::CompositionUnderline>& ui_underlines,
+    const gfx::Range& range,
+    int32_t start,
+    int32_t end) {
+  std::vector<blink::WebCompositionUnderline> underlines =
+      ConvertToBlinkUnderline(ui_underlines);
+  SendInput(base::MakeUnique<InputMsg_ImeSetComposition>(
+      input_router_->routing_id(), text, underlines, range, start, end));
+}
+
+void LegacyIPCWidgetInputHandler::ImeCommitText(
+    const base::string16& text,
+    const std::vector<ui::CompositionUnderline>& ui_underlines,
+    const gfx::Range& range,
+    int32_t relative_cursor_position) {
+  std::vector<blink::WebCompositionUnderline> underlines =
+      ConvertToBlinkUnderline(ui_underlines);
+  SendInput(base::MakeUnique<InputMsg_ImeCommitText>(
+      input_router_->routing_id(), text, underlines, range,
+      relative_cursor_position));
+}
+
+void LegacyIPCWidgetInputHandler::ImeFinishComposingText(bool keep_selection) {
+  SendInput(base::MakeUnique<InputMsg_ImeFinishComposingText>(
+      input_router_->routing_id(), keep_selection));
+}
+void LegacyIPCWidgetInputHandler::RequestTextInputStateUpdate() {
+#if defined(OS_ANDROID)
+  SendInput(base::MakeUnique<InputMsg_RequestTextInputStateUpdate>(
+      input_router_->routing_id()));
+#endif
+}
+
+void LegacyIPCWidgetInputHandler::RequestCompositionUpdates(
+    bool immediate_request,
+    bool monitor_request) {
+  SendInput(base::MakeUnique<InputMsg_RequestCompositionUpdates>(
+      input_router_->routing_id(), immediate_request, monitor_request));
+}
+
+void LegacyIPCWidgetInputHandler::SendInput(
+    std::unique_ptr<IPC::Message> message) {
+  input_router_->SendInput(std::move(message));
+}
+
+void LegacyIPCWidgetInputHandler::DispatchEvent(
+    content::mojom::EventPtr event,
+    DispatchEventCallback callback) {
+  // We only expect these events to be called with the mojo enabled input
+  // channel. The LegacyInputRouterImpl will handle sending the events
+  // directly.
+  NOTREACHED();
+}
+
+void LegacyIPCWidgetInputHandler::DispatchNonBlockingEvent(
+    content::mojom::EventPtr) {
+  // We only expect these events to be called with the mojo enabled input
+  // channel. The LegacyInputRouterImpl will handle sending the events
+  // directly.
+  NOTREACHED();
+}
+
+}  // namespace content
diff --git a/content/browser/renderer_host/input/legacy_ipc_widget_input_handler.h b/content/browser/renderer_host/input/legacy_ipc_widget_input_handler.h
new file mode 100644
index 0000000..af0ee2d
--- /dev/null
+++ b/content/browser/renderer_host/input/legacy_ipc_widget_input_handler.h
@@ -0,0 +1,58 @@
+// 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 CONTENT_BROWSER_RENDERER_HOST_INPUT_LEGACY_IPC_WIDGET_INPUT_HANDLER_H_
+#define CONTENT_BROWSER_RENDERER_HOST_INPUT_LEGACY_IPC_WIDGET_INPUT_HANDLER_H_
+
+#include "content/common/input/input_handler.mojom.h"
+
+namespace content {
+
+class LegacyInputRouterImpl;
+
+// An instance of a mojom::WidgetInputHandler based on chrome IPC.
+// This class is a temporary class to allow the input messages to
+// remain as Chrome IPC messages but progressively work at moving
+// them to mojo.
+class CONTENT_EXPORT LegacyIPCWidgetInputHandler
+    : public mojom::WidgetInputHandler {
+ public:
+  explicit LegacyIPCWidgetInputHandler(LegacyInputRouterImpl* input_router);
+  ~LegacyIPCWidgetInputHandler() override;
+
+  // mojom::WidgetInputHandler overrides.
+  void SetFocus(bool focused) override;
+  void MouseCaptureLost() override;
+  void SetEditCommandsForNextKeyEvent(
+      const std::vector<EditCommand>& commands) override;
+  void CursorVisibilityChanged(bool visible) override;
+  void ImeSetComposition(
+      const base::string16& text,
+      const std::vector<ui::CompositionUnderline>& underlines,
+      const gfx::Range& range,
+      int32_t start,
+      int32_t end) override;
+  void ImeCommitText(const base::string16& text,
+                     const std::vector<ui::CompositionUnderline>& underlines,
+                     const gfx::Range& range,
+                     int32_t relative_cursor_position) override;
+  void ImeFinishComposingText(bool keep_selection) override;
+  void RequestTextInputStateUpdate() override;
+  void RequestCompositionUpdates(bool immediate_request,
+                                 bool monitor_request) override;
+  void DispatchEvent(content::mojom::EventPtr event,
+                     DispatchEventCallback callback) override;
+  void DispatchNonBlockingEvent(content::mojom::EventPtr) override;
+
+ private:
+  void SendInput(std::unique_ptr<IPC::Message> message);
+
+  LegacyInputRouterImpl* input_router_;
+
+  DISALLOW_COPY_AND_ASSIGN(LegacyIPCWidgetInputHandler);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_RENDERER_HOST_INPUT_LEGACY_IPC_WIDGET_INPUT_HANDLER_H_
diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc b/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc
index 199df16..19cc95df2 100644
--- a/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc
+++ b/content/browser/renderer_host/input/touch_selection_controller_client_aura.cc
@@ -323,9 +323,10 @@
 
 void TouchSelectionControllerClientAura::InternalClient::MoveCaret(
     const gfx::PointF& position) {
-  RenderWidgetHostImpl* host =
-      RenderWidgetHostImpl::From(rwhva_->GetRenderWidgetHost());
-  host->MoveCaret(gfx::ToRoundedPoint(position));
+  RenderWidgetHostDelegate* host_delegate =
+      RenderWidgetHostImpl::From(rwhva_->GetRenderWidgetHost())->delegate();
+  if (host_delegate)
+    host_delegate->MoveCaret(gfx::ToRoundedPoint(position));
 }
 
 void TouchSelectionControllerClientAura::MoveRangeSelectionExtent(
diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.cc b/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.cc
index 8dcb229..0cd3bf9b 100644
--- a/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.cc
+++ b/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.cc
@@ -86,9 +86,10 @@
 
 void TouchSelectionControllerClientChildFrame::MoveCaret(
     const gfx::PointF& position) {
-  RenderWidgetHostImpl* host =
-      RenderWidgetHostImpl::From(rwhv_->GetRenderWidgetHost());
-  host->MoveCaret(ConvertFromRoot(position));
+  RenderWidgetHostDelegate* host_delegate =
+      RenderWidgetHostImpl::From(rwhv_->GetRenderWidgetHost())->delegate();
+  if (host_delegate)
+    host_delegate->MoveCaret(ConvertFromRoot(position));
 }
 
 void TouchSelectionControllerClientChildFrame::MoveRangeSelectionExtent(
diff --git a/content/browser/renderer_host/render_widget_host_delegate.h b/content/browser/renderer_host/render_widget_host_delegate.h
index 8b98a64a..3083f04 100644
--- a/content/browser/renderer_host/render_widget_host_delegate.h
+++ b/content/browser/renderer_host/render_widget_host_delegate.h
@@ -126,6 +126,9 @@
       GetOrCreateRootBrowserAccessibilityManager();
 
   // Send OS Cut/Copy/Paste actions to the focused frame.
+  virtual void ExecuteEditCommand(
+      const std::string& command,
+      const base::Optional<base::string16>& value) = 0;
   virtual void Cut() = 0;
   virtual void Copy() = 0;
   virtual void Paste() = 0;
@@ -138,6 +141,9 @@
   // currently focused frame.
   virtual void SelectRange(const gfx::Point& base, const gfx::Point& extent) {}
 
+  // Request the renderer to Move the caret to the new position.
+  virtual void MoveCaret(const gfx::Point& extent) {}
+
   virtual RenderWidgetHostInputEventRouter* GetInputEventRouter();
 
   // Send page-level focus state to all SiteInstances involved in rendering the
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index 2146b973..84d1bc1 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -336,6 +336,8 @@
 
   input_router_.reset(new LegacyInputRouterImpl(
       process_, this, this, routing_id_, GetInputRouterConfigForPlatform()));
+  legacy_widget_input_handler_ = base::MakeUnique<LegacyIPCWidgetInputHandler>(
+      static_cast<LegacyInputRouterImpl*>(input_router_.get()));
 
   touch_emulator_.reset();
 
@@ -591,9 +593,7 @@
 }
 
 bool RenderWidgetHostImpl::Send(IPC::Message* msg) {
-  if (IPC_MESSAGE_ID_CLASS(msg->type()) == InputMsgStart)
-    return input_router_->SendInput(base::WrapUnique(msg));
-
+  DCHECK(IPC_MESSAGE_ID_CLASS(msg->type()) != InputMsgStart);
   return process_->Send(msg);
 }
 
@@ -814,7 +814,7 @@
       touch_emulator_->CancelTouch();
   }
 
-  Send(new InputMsg_SetFocus(routing_id_, focused));
+  GetWidgetInputHandler()->SetFocus(focused);
 
   // Also send page-level focus state to other SiteInstances involved in
   // rendering the current FrameTree.
@@ -826,7 +826,7 @@
   if (touch_emulator_)
     touch_emulator_->CancelTouch();
 
-  Send(new InputMsg_MouseCaptureLost(routing_id_));
+  GetWidgetInputHandler()->MouseCaptureLost();
 
   if (delegate_)
     delegate_->LostCapture(this);
@@ -1303,8 +1303,7 @@
   // InputMsg_HandleInputEvent is, but has to be sent first.
   // https://crbug.com/684298
   if (commands && !commands->empty()) {
-    Send(
-        new InputMsg_SetEditCommandsForNextKeyEvent(GetRoutingID(), *commands));
+    GetWidgetInputHandler()->SetEditCommandsForNextKeyEvent(*commands);
   }
   input_router_->SendKeyboardEvent(key_event_with_latency);
 }
@@ -1336,7 +1335,7 @@
 }
 
 void RenderWidgetHostImpl::SendCursorVisibilityState(bool is_visible) {
-  Send(new InputMsg_CursorVisibilityChange(GetRoutingID(), is_visible));
+  GetWidgetInputHandler()->CursorVisibilityChanged(is_visible);
 }
 
 int64_t RenderWidgetHostImpl::GetLatencyComponentId() const {
@@ -1480,6 +1479,10 @@
   SetCursor(cursor);
 }
 
+mojom::WidgetInputHandler* RenderWidgetHostImpl::GetWidgetInputHandler() {
+  return legacy_widget_input_handler_.get();
+}
+
 void RenderWidgetHostImpl::NotifyScreenInfoChanged() {
   if (delegate_)
     delegate_->ScreenInfoChanged();
@@ -1690,6 +1693,8 @@
   // destroy the aura window, which may dispatch a synthetic mouse move.)
   input_router_.reset(new LegacyInputRouterImpl(
       process_, this, this, routing_id_, GetInputRouterConfigForPlatform()));
+  legacy_widget_input_handler_ = base::MakeUnique<LegacyIPCWidgetInputHandler>(
+      static_cast<LegacyInputRouterImpl*>(input_router_.get()));
 
   synthetic_gesture_controller_.reset();
 
@@ -1718,32 +1723,31 @@
 
 void RenderWidgetHostImpl::ImeSetComposition(
     const base::string16& text,
-    const std::vector<blink::WebCompositionUnderline>& underlines,
+    const std::vector<ui::CompositionUnderline>& underlines,
     const gfx::Range& replacement_range,
     int selection_start,
     int selection_end) {
-  Send(new InputMsg_ImeSetComposition(
-            GetRoutingID(), text, underlines, replacement_range,
-            selection_start, selection_end));
+  GetWidgetInputHandler()->ImeSetComposition(
+      text, underlines, replacement_range, selection_start, selection_end);
 }
 
 void RenderWidgetHostImpl::ImeCommitText(
     const base::string16& text,
-    const std::vector<blink::WebCompositionUnderline>& underlines,
+    const std::vector<ui::CompositionUnderline>& underlines,
     const gfx::Range& replacement_range,
     int relative_cursor_pos) {
-  Send(new InputMsg_ImeCommitText(GetRoutingID(), text, underlines,
-                                  replacement_range, relative_cursor_pos));
+  GetWidgetInputHandler()->ImeCommitText(text, underlines, replacement_range,
+                                         relative_cursor_pos);
 }
 
 void RenderWidgetHostImpl::ImeFinishComposingText(bool keep_selection) {
-  Send(new InputMsg_ImeFinishComposingText(GetRoutingID(), keep_selection));
+  GetWidgetInputHandler()->ImeFinishComposingText(keep_selection);
 }
 
 void RenderWidgetHostImpl::ImeCancelComposition() {
-  Send(new InputMsg_ImeSetComposition(GetRoutingID(), base::string16(),
-            std::vector<blink::WebCompositionUnderline>(),
-            gfx::Range::InvalidRange(), 0, 0));
+  GetWidgetInputHandler()->ImeSetComposition(
+      base::string16(), std::vector<ui::CompositionUnderline>(),
+      gfx::Range::InvalidRange(), 0, 0);
 }
 
 void RenderWidgetHostImpl::RejectMouseLockOrUnlockIfNecessary() {
@@ -2354,7 +2358,9 @@
 
 void RenderWidgetHostImpl::OnSyntheticGestureCompleted(
     SyntheticGesture::Result result) {
-  Send(new InputMsg_SyntheticGestureCompleted(GetRoutingID()));
+  // TODO(dtapuska): Define mojo interface for InputHostMsg's and this will be a
+  // callback for completing InputHostMsg_QueueSyntheticGesture.
+  process_->Send(new InputMsg_SyntheticGestureCompleted(GetRoutingID()));
 }
 
 bool RenderWidgetHostImpl::ShouldDropInputEvents() const {
@@ -2365,20 +2371,6 @@
   Send(new ViewMsg_SetBackgroundOpaque(GetRoutingID(), opaque));
 }
 
-void RenderWidgetHostImpl::ExecuteEditCommand(const std::string& command,
-                                              const std::string& value) {
-  Send(new InputMsg_ExecuteEditCommand(GetRoutingID(), command, value));
-}
-
-void RenderWidgetHostImpl::ScrollFocusedEditableNodeIntoRect(
-    const gfx::Rect& rect) {
-  Send(new InputMsg_ScrollFocusedEditableNodeIntoRect(GetRoutingID(), rect));
-}
-
-void RenderWidgetHostImpl::MoveCaret(const gfx::Point& point) {
-  Send(new InputMsg_MoveCaret(GetRoutingID(), point));
-}
-
 bool RenderWidgetHostImpl::GotResponseToLockMouseRequest(bool allowed) {
   if (!allowed) {
     RejectMouseLockOrUnlockIfNecessary();
@@ -2557,8 +2549,8 @@
   if (!immediate_request && monitor_updates == monitoring_composition_info_)
     return;
   monitoring_composition_info_ = monitor_updates;
-  Send(new InputMsg_RequestCompositionUpdates(routing_id_, immediate_request,
-                                              monitor_updates));
+  GetWidgetInputHandler()->RequestCompositionUpdates(immediate_request,
+                                                     monitor_updates);
 }
 
 void RenderWidgetHostImpl::RequestCompositorFrameSink(
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index 62299ad..87deb32f 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -31,6 +31,7 @@
 #include "content/browser/renderer_host/event_with_latency_info.h"
 #include "content/browser/renderer_host/input/input_ack_handler.h"
 #include "content/browser/renderer_host/input/input_router_client.h"
+#include "content/browser/renderer_host/input/legacy_ipc_widget_input_handler.h"
 #include "content/browser/renderer_host/input/render_widget_host_latency_tracker.h"
 #include "content/browser/renderer_host/input/synthetic_gesture.h"
 #include "content/browser/renderer_host/input/synthetic_gesture_controller.h"
@@ -39,6 +40,7 @@
 #include "content/browser/renderer_host/render_widget_host_view_base.h"
 #include "content/common/drag_event_source_info.h"
 #include "content/common/input/input_event_ack_state.h"
+#include "content/common/input/input_handler.mojom.h"
 #include "content/common/input/synthetic_gesture_packet.h"
 #include "content/common/render_widget_surface_properties.h"
 #include "content/common/view_message_enums.h"
@@ -67,7 +69,6 @@
 namespace blink {
 class WebInputEvent;
 class WebMouseEvent;
-struct WebCompositionUnderline;
 }
 
 namespace cc {
@@ -209,6 +210,7 @@
   void DragSourceSystemDragEnded() override;
   void FilterDropData(DropData* drop_data) override;
   void SetCursor(const CursorInfo& cursor_info) override;
+  mojom::WidgetInputHandler* GetWidgetInputHandler();
 
   // Notification that the screen info has changed.
   void NotifyScreenInfoChanged();
@@ -411,7 +413,7 @@
   // * when markedText of NSTextInput is called (on Mac).
   void ImeSetComposition(
       const base::string16& text,
-      const std::vector<blink::WebCompositionUnderline>& underlines,
+      const std::vector<ui::CompositionUnderline>& underlines,
       const gfx::Range& replacement_range,
       int selection_start,
       int selection_end);
@@ -423,11 +425,10 @@
   //   (on Windows);
   // * when it receives a "commit" signal of GtkIMContext (on Linux);
   // * when insertText of NSTextInput is called (on Mac).
-  void ImeCommitText(
-      const base::string16& text,
-      const std::vector<blink::WebCompositionUnderline>& underlines,
-      const gfx::Range& replacement_range,
-      int relative_cursor_pos);
+  void ImeCommitText(const base::string16& text,
+                     const std::vector<ui::CompositionUnderline>& underlines,
+                     const gfx::Range& replacement_range,
+                     int relative_cursor_pos);
 
   // Finishes an ongoing composition.
   // A browser should call this function or ImeCommitText:
@@ -452,18 +453,6 @@
   // Set the RenderView background transparency.
   void SetBackgroundOpaque(bool opaque);
 
-  // Executes the edit command.
-  void ExecuteEditCommand(const std::string& command,
-                          const std::string& value);
-
-  // Tells the renderer to scroll the currently focused node into rect only if
-  // the currently focused node is a Text node (textfield, text area or content
-  // editable divs).
-  void ScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect);
-
-  // Requests the renderer to move the caret selection towards the point.
-  void MoveCaret(const gfx::Point& point);
-
   // Called when the reponse to a pending mouse lock request has arrived.
   // Returns true if |allowed| is true and the mouse has been successfully
   // locked.
@@ -992,6 +981,8 @@
   // Sorted by frame token.
   std::queue<std::pair<uint32_t, std::vector<IPC::Message>>> queued_messages_;
 
+  std::unique_ptr<LegacyIPCWidgetInputHandler> legacy_widget_input_handler_;
+
   base::WeakPtrFactory<RenderWidgetHostImpl> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostImpl);
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc
index ded5ede..e342df3 100644
--- a/content/browser/renderer_host/render_widget_host_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -94,22 +94,16 @@
 class MockInputRouter : public InputRouter {
  public:
   explicit MockInputRouter(InputRouterClient* client)
-      : send_event_called_(false),
-        sent_mouse_event_(false),
+      : sent_mouse_event_(false),
         sent_wheel_event_(false),
         sent_keyboard_event_(false),
         sent_gesture_event_(false),
         send_touch_event_not_cancelled_(false),
         message_received_(false),
-        client_(client) {
-  }
+        client_(client) {}
   ~MockInputRouter() override {}
 
   // InputRouter
-  bool SendInput(std::unique_ptr<IPC::Message> message) override {
-    send_event_called_ = true;
-    return true;
-  }
   void SendMouseEvent(const MouseEventWithLatencyInfo& mouse_event) override {
     sent_mouse_event_ = true;
   }
@@ -146,7 +140,6 @@
     return false;
   }
 
-  bool send_event_called_;
   bool sent_mouse_event_;
   bool sent_wheel_event_;
   bool sent_keyboard_event_;
@@ -205,6 +198,9 @@
   void DisableGestureDebounce() {
     input_router_.reset(new LegacyInputRouterImpl(
         process_, this, this, routing_id_, InputRouter::Config()));
+    legacy_widget_input_handler_ =
+        base::MakeUnique<LegacyIPCWidgetInputHandler>(
+            static_cast<LegacyInputRouterImpl*>(input_router_.get()));
   }
 
   WebInputEvent::Type acked_touch_event_type() const {
@@ -213,6 +209,9 @@
 
   void SetupForInputRouterTest() {
     input_router_.reset(new MockInputRouter(this));
+    legacy_widget_input_handler_ =
+        base::MakeUnique<LegacyIPCWidgetInputHandler>(
+            static_cast<LegacyInputRouterImpl*>(input_router_.get()));
   }
 
   MockInputRouter* mock_input_router() {
@@ -487,6 +486,10 @@
     unresponsive_timer_fired_ = true;
   }
 
+  void ExecuteEditCommand(
+      const std::string& command,
+      const base::Optional<base::string16>& value) override {}
+
   void Cut() override {}
   void Copy() override {}
   void Paste() override {}
@@ -1682,54 +1685,6 @@
   EXPECT_EQ(0U, process_->sink().message_count());
 }
 
-#define TEST_InputRouterRoutes_NOARGS(INPUTMSG) \
-  TEST_F(RenderWidgetHostTest, InputRouterRoutes##INPUTMSG) { \
-    host_->SetupForInputRouterTest(); \
-    host_->INPUTMSG(); \
-    EXPECT_TRUE(host_->mock_input_router()->send_event_called_); \
-  }
-
-TEST_InputRouterRoutes_NOARGS(Focus);
-TEST_InputRouterRoutes_NOARGS(Blur);
-TEST_InputRouterRoutes_NOARGS(LostCapture);
-
-#undef TEST_InputRouterRoutes_NOARGS
-
-#define TEST_InputRouterRoutes_NOARGS_FromRFH(INPUTMSG) \
-  TEST_F(RenderWidgetHostTest, InputRouterRoutes##INPUTMSG) { \
-    host_->SetupForInputRouterTest(); \
-    host_->Send(new INPUTMSG(host_->GetRoutingID())); \
-    EXPECT_TRUE(host_->mock_input_router()->send_event_called_); \
-  }
-
-TEST_InputRouterRoutes_NOARGS_FromRFH(InputMsg_Undo);
-TEST_InputRouterRoutes_NOARGS_FromRFH(InputMsg_Redo);
-TEST_InputRouterRoutes_NOARGS_FromRFH(InputMsg_Cut);
-TEST_InputRouterRoutes_NOARGS_FromRFH(InputMsg_Copy);
-#if defined(OS_MACOSX)
-TEST_InputRouterRoutes_NOARGS_FromRFH(InputMsg_CopyToFindPboard);
-#endif
-TEST_InputRouterRoutes_NOARGS_FromRFH(InputMsg_Paste);
-TEST_InputRouterRoutes_NOARGS_FromRFH(InputMsg_PasteAndMatchStyle);
-TEST_InputRouterRoutes_NOARGS_FromRFH(InputMsg_Delete);
-TEST_InputRouterRoutes_NOARGS_FromRFH(InputMsg_SelectAll);
-TEST_InputRouterRoutes_NOARGS_FromRFH(InputMsg_CollapseSelection);
-
-#undef TEST_InputRouterRoutes_NOARGS_FromRFH
-
-TEST_F(RenderWidgetHostTest, InputRouterRoutesReplace) {
-  host_->SetupForInputRouterTest();
-  host_->Send(new InputMsg_Replace(host_->GetRoutingID(), base::string16()));
-  EXPECT_TRUE(host_->mock_input_router()->send_event_called_);
-}
-
-TEST_F(RenderWidgetHostTest, InputRouterRoutesReplaceMisspelling) {
-  host_->SetupForInputRouterTest();
-  host_->Send(new InputMsg_ReplaceMisspelling(host_->GetRoutingID(),
-                                              base::string16()));
-  EXPECT_TRUE(host_->mock_input_router()->send_event_called_);
-}
-
 TEST_F(RenderWidgetHostTest, IgnoreInputEvent) {
   host_->SetupForInputRouterTest();
 
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index b11b0aa..d4b5e98 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -1955,8 +1955,8 @@
 }
 
 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) {
-  if (host_)
-    host_->MoveCaret(point);
+  if (host_ && host_->delegate())
+    host_->delegate()->MoveCaret(point);
 }
 
 void RenderWidgetHostViewAndroid::ShowContextMenuAtPoint(
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index 2c426e7..a6c969f 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -145,15 +145,15 @@
 // is obscured by the on screen keyboard.
 class WinScreenKeyboardObserver : public ui::OnScreenKeyboardObserver {
  public:
-  WinScreenKeyboardObserver(RenderWidgetHostImpl* host,
+  WinScreenKeyboardObserver(RenderWidgetHostViewAura* host_view,
                             const gfx::Point& location_in_screen,
                             float scale_factor,
                             aura::Window* window)
-      : host_(host),
+      : host_view_(host_view),
         location_in_screen_(location_in_screen),
         device_scale_factor_(scale_factor),
         window_(window) {
-    host_->GetView()->SetInsets(gfx::Insets());
+    host_view_->SetInsets(gfx::Insets());
   }
 
   // base::win::OnScreenKeyboardObserver overrides.
@@ -162,7 +162,7 @@
         gfx::ConvertPointToPixel(device_scale_factor_, location_in_screen_);
 
     // Restore the viewport.
-    host_->GetView()->SetInsets(gfx::Insets());
+    host_view_->SetInsets(gfx::Insets());
 
     if (keyboard_rect_pixels.Contains(location_in_pixels)) {
       aura::client::ScreenPositionClient* screen_position_client =
@@ -187,7 +187,7 @@
       if (viewport_bottom > bounds_in_screen.height())
         return;
 
-      host_->GetView()->SetInsets(gfx::Insets(0, 0, viewport_bottom, 0));
+      host_view_->SetInsets(gfx::Insets(0, 0, viewport_bottom, 0));
 
       gfx::Point origin(location_in_screen_);
       screen_position_client->ConvertPointFromScreen(window_, &origin);
@@ -197,17 +197,18 @@
       // We want to scroll the node into a rectangle which originates from
       // the touch point and a small offset (10) in either direction.
       gfx::Rect node_rect(origin.x(), origin.y(), 10, 10);
-      host_->ScrollFocusedEditableNodeIntoRect(node_rect);
+
+      host_view_->ScrollFocusedEditableNodeIntoRect(node_rect);
     }
   }
 
   void OnKeyboardHidden(const gfx::Rect& keyboard_rect_pixels) override {
     // Restore the viewport.
-    host_->GetView()->SetInsets(gfx::Insets());
+    host_view_->SetInsets(gfx::Insets());
   }
 
  private:
-  RenderWidgetHostImpl* host_;
+  RenderWidgetHostViewAura* host_view_;
   // The location in DIPs where the touch occurred.
   gfx::Point location_in_screen_;
   // The current device scale factor.
@@ -770,7 +771,7 @@
   DCHECK(osk_display_manager);
   if (editable && host_->GetView() && host_->delegate()) {
     keyboard_observer_.reset(new WinScreenKeyboardObserver(
-        host_, location_dips_screen, device_scale_factor_, window_));
+        this, location_dips_screen, device_scale_factor_, window_));
     virtual_keyboard_requested_ =
         osk_display_manager->DisplayVirtualKeyboard(keyboard_observer_.get());
   } else {
@@ -1168,25 +1169,10 @@
   if (!text_input_manager_ || !text_input_manager_->GetActiveWidget())
     return;
 
-  // TODO(suzhe): convert both renderer_host and renderer to use
-  // ui::CompositionText.
-  std::vector<blink::WebCompositionUnderline> underlines;
-  underlines.reserve(composition.underlines.size());
-  for (std::vector<ui::CompositionUnderline>::const_iterator it =
-           composition.underlines.begin();
-       it != composition.underlines.end(); ++it) {
-    underlines.push_back(
-        blink::WebCompositionUnderline(static_cast<unsigned>(it->start_offset),
-                                       static_cast<unsigned>(it->end_offset),
-                                       it->color,
-                                       it->thick,
-                                       it->background_color));
-  }
-
   // TODO(suzhe): due to a bug of webkit, we can't use selection range with
   // composition string. See: https://bugs.webkit.org/show_bug.cgi?id=37788
   text_input_manager_->GetActiveWidget()->ImeSetComposition(
-      composition.text, underlines, gfx::Range::InvalidRange(),
+      composition.text, composition.underlines, gfx::Range::InvalidRange(),
       composition.selection.end(), composition.selection.end());
 
   has_composition_text_ = !composition.text.empty();
@@ -1213,7 +1199,7 @@
   if (text_input_manager_ && text_input_manager_->GetActiveWidget()) {
     if (text.length())
       text_input_manager_->GetActiveWidget()->ImeCommitText(
-          text, std::vector<blink::WebCompositionUnderline>(),
+          text, std::vector<ui::CompositionUnderline>(),
           gfx::Range::InvalidRange(), 0);
     else if (has_composition_text_)
       text_input_manager_->GetActiveWidget()->ImeFinishComposingText(false);
@@ -1443,7 +1429,7 @@
       window_->GetBoundsInScreen(), hidden_window_bounds_in_screen);
   visible_area_in_local_space =
       ConvertRectFromScreen(visible_area_in_local_space);
-  host_->ScrollFocusedEditableNodeIntoRect(visible_area_in_local_space);
+  ScrollFocusedEditableNodeIntoRect(visible_area_in_local_space);
 }
 
 bool RenderWidgetHostViewAura::IsTextEditCommandEnabled(
@@ -2421,4 +2407,12 @@
   delegated_frame_host_->SetNeedsBeginFrames(needs_begin_frames_);
 }
 
+void RenderWidgetHostViewAura::ScrollFocusedEditableNodeIntoRect(
+    const gfx::Rect& node_rect) {
+  RenderFrameHostImpl* rfh = GetFocusedFrame();
+  if (rfh) {
+    rfh->GetFrameInputHandler()->ScrollFocusedEditableNodeIntoRect(node_rect);
+  }
+}
+
 }  // namespace content
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h
index 3db5e41..9c4f3d4 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.h
+++ b/content/browser/renderer_host/render_widget_host_view_aura.h
@@ -332,6 +332,8 @@
     return event_handler_.get();
   }
 
+  void ScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect);
+
  protected:
   ~RenderWidgetHostViewAura() override;
 
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index 72315fe..2e142be 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -243,6 +243,9 @@
     last_event_.reset(new NativeWebKeyboardEvent(event));
     return pre_handle_keyboard_event_result_;
   }
+  void ExecuteEditCommand(
+      const std::string& command,
+      const base::Optional<base::string16>& value) override {}
   void Cut() override {}
   void Copy() override {}
   void Paste() override {}
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h
index 9dcacd2..031508c 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.h
+++ b/content/browser/renderer_host/render_widget_host_view_mac.h
@@ -32,12 +32,12 @@
 #include "content/common/cursors/webcursor.h"
 #include "content/common/edit_command.h"
 #include "ipc/ipc_sender.h"
-#include "third_party/WebKit/public/web/WebCompositionUnderline.h"
 #include "ui/accelerated_widget_mac/accelerated_widget_mac.h"
 #include "ui/accelerated_widget_mac/display_link_mac.h"
 #import "ui/base/cocoa/command_dispatcher.h"
 #include "ui/base/cocoa/remote_layer_api.h"
 #import "ui/base/cocoa/tool_tip_base_view.h"
+#include "ui/base/ime/composition_underline.h"
 #include "ui/display/display_observer.h"
 
 namespace content {
@@ -124,7 +124,7 @@
   NSRange markedTextSelectedRange_;
 
   // Underline information of the |markedText_|.
-  std::vector<blink::WebCompositionUnderline> underlines_;
+  std::vector<ui::CompositionUnderline> underlines_;
 
   // Replacement range information received from |setMarkedText:|.
   gfx::Range setMarkedTextReplacementRange_;
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index 18561991..1c48e6b 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -279,9 +279,8 @@
 
 // Extract underline information from an attributed string. Mostly copied from
 // third_party/WebKit/Source/WebKit/mac/WebView/WebHTMLView.mm
-void ExtractUnderlines(
-    NSAttributedString* string,
-    std::vector<blink::WebCompositionUnderline>* underlines) {
+void ExtractUnderlines(NSAttributedString* string,
+                       std::vector<ui::CompositionUnderline>* underlines) {
   int length = [[string string] length];
   int i = 0;
   while (i < length) {
@@ -297,11 +296,8 @@
             [colorAttr colorUsingColorSpaceName:NSDeviceRGBColorSpace]);
       }
       underlines->push_back(
-          blink::WebCompositionUnderline(range.location,
-                                         NSMaxRange(range),
-                                         color,
-                                         [style intValue] > 1,
-                                         SK_ColorTRANSPARENT));
+          ui::CompositionUnderline(range.location, NSMaxRange(range), color,
+                                   [style intValue] > 1, SK_ColorTRANSPARENT));
     }
     i = range.location + range.length;
   }
@@ -2244,7 +2240,7 @@
   if (textToBeInserted_.length() >
       ((hasMarkedText_ || oldHasMarkedText) ? 0u : 1u)) {
     widgetHost->ImeCommitText(textToBeInserted_,
-                              std::vector<blink::WebCompositionUnderline>(),
+                              std::vector<ui::CompositionUnderline>(),
                               gfx::Range::InvalidRange(), 0);
     textInserted = YES;
   }
@@ -3263,8 +3259,8 @@
     ExtractUnderlines(string, &underlines_);
   } else {
     // Use a thin black underline by default.
-    underlines_.push_back(blink::WebCompositionUnderline(
-        0, length, SK_ColorBLACK, false, SK_ColorTRANSPARENT));
+    underlines_.push_back(ui::CompositionUnderline(0, length, SK_ColorBLACK,
+                                                   false, SK_ColorTRANSPARENT));
   }
 
   // If we are handling a key down event, then SetComposition() will be
@@ -3307,9 +3303,10 @@
                           base::CompareCase::INSENSITIVE_ASCII))
       editCommands_.push_back(EditCommand(command, ""));
   } else {
-    RenderWidgetHostImpl* rwh = renderWidgetHostView_->render_widget_host_;
-    rwh->Send(new InputMsg_ExecuteEditCommand(rwh->GetRoutingID(),
-                                              command, ""));
+    if (renderWidgetHostView_->render_widget_host_->delegate()) {
+      renderWidgetHostView_->render_widget_host_->delegate()
+          ->ExecuteEditCommand(command, base::nullopt);
+    }
   }
 }
 
@@ -3338,7 +3335,7 @@
     if (renderWidgetHostView_->GetActiveWidget()) {
       renderWidgetHostView_->GetActiveWidget()->ImeCommitText(
           base::SysNSStringToUTF16(im_text),
-          std::vector<blink::WebCompositionUnderline>(), replacement_range, 0);
+          std::vector<ui::CompositionUnderline>(), replacement_range, 0);
     }
   }
 
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper.mm b/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper.mm
index b6923ee..72cbc1c2 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper.mm
@@ -142,10 +142,10 @@
       renderWidgetHostViewMac];
   DCHECK(rwhv);
 
-  RenderWidgetHostImpl* rwh =
-      RenderWidgetHostImpl::From(rwhv->GetRenderWidgetHost());
-  // The second parameter is the core command value which isn't used here.
-  rwh->ExecuteEditCommand(command, "");
+  RenderWidgetHostDelegate* host_delegate =
+      RenderWidgetHostImpl::From(rwhv->GetRenderWidgetHost())->delegate();
+  if (host_delegate)
+    host_delegate->ExecuteEditCommand(command, base::nullopt);
 }
 
 }  // namespace
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper_unittest.mm
index 3c513e0..b24bdafb 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper_unittest.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper_unittest.mm
@@ -74,34 +74,24 @@
   return true;
 }
 
-class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
+class RenderWidgetHostDelegateEditCommandCounter
+    : public RenderWidgetHostDelegate {
  public:
-  MockRenderWidgetHostDelegate() {}
-  ~MockRenderWidgetHostDelegate() override {}
-
-  private:
-   void Cut() override {}
-   void Copy() override {}
-   void Paste() override {}
-   void SelectAll() override {}
-};
-
-// Create a RenderWidget for which we can filter messages.
-class RenderWidgetHostEditCommandCounter : public RenderWidgetHostImpl {
- public:
-  RenderWidgetHostEditCommandCounter(RenderWidgetHostDelegate* delegate,
-                                     RenderProcessHost* process,
-                                     int32_t routing_id)
-      : RenderWidgetHostImpl(delegate, process, routing_id, false),
-        edit_command_message_count_(0) {}
-
-  bool Send(IPC::Message* message) override {
-    if (message->type() == InputMsg_ExecuteEditCommand::ID)
-      edit_command_message_count_++;
-    return RenderWidgetHostImpl::Send(message);
-  }
-
+  RenderWidgetHostDelegateEditCommandCounter()
+      : edit_command_message_count_(0) {}
+  ~RenderWidgetHostDelegateEditCommandCounter() override {}
   unsigned int edit_command_message_count_;
+
+ private:
+  void ExecuteEditCommand(
+      const std::string& command,
+      const base::Optional<base::string16>& value) override {
+    edit_command_message_count_++;
+  }
+  void Cut() override {}
+  void Copy() override {}
+  void Paste() override {}
+  void SelectAll() override {}
 };
 
 class RenderWidgetHostViewMacEditCommandHelperTest : public PlatformTest {
@@ -136,7 +126,7 @@
 // RenderWidgetHost.
 TEST_F(RenderWidgetHostViewMacEditCommandHelperWithTaskEnvTest,
        TestEditingCommandDelivery) {
-  MockRenderWidgetHostDelegate delegate;
+  RenderWidgetHostDelegateEditCommandCounter delegate;
   TestBrowserContext browser_context;
   MockRenderProcessHostFactory process_host_factory;
   RenderProcessHost* process_host =
@@ -150,9 +140,9 @@
   base::mac::ScopedNSAutoreleasePool pool;
 
   int32_t routing_id = process_host->GetNextRoutingID();
-  RenderWidgetHostEditCommandCounter* render_widget =
-      new RenderWidgetHostEditCommandCounter(&delegate, process_host,
-                                             routing_id);
+
+  RenderWidgetHostImpl* render_widget =
+      new RenderWidgetHostImpl(&delegate, process_host, routing_id, false);
 
   ui::WindowResizeHelperMac::Get()->Init(base::ThreadTaskRunnerHandle::Get());
 
@@ -176,7 +166,7 @@
   }
 
   size_t num_edit_commands = [edit_command_strings count];
-  EXPECT_EQ(render_widget->edit_command_message_count_, num_edit_commands);
+  EXPECT_EQ(delegate.edit_command_message_count_, num_edit_commands);
   rwhv_cocoa.reset();
   pool.Recycle();
 
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
index cd5e5117..87946bc29 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
@@ -210,6 +210,9 @@
   }
 
  private:
+  void ExecuteEditCommand(
+      const std::string& command,
+      const base::Optional<base::string16>& value) override {}
   void Cut() override {}
   void Copy() override {}
   void Paste() override {}
diff --git a/content/browser/renderer_host/text_input_client_mac_unittest.mm b/content/browser/renderer_host/text_input_client_mac_unittest.mm
index c74fc6db..73c1be83 100644
--- a/content/browser/renderer_host/text_input_client_mac_unittest.mm
+++ b/content/browser/renderer_host/text_input_client_mac_unittest.mm
@@ -34,6 +34,9 @@
   ~MockRenderWidgetHostDelegate() override {}
 
  private:
+  void ExecuteEditCommand(
+      const std::string& command,
+      const base::Optional<base::string16>& value) override {}
   void Cut() override {}
   void Copy() override {}
   void Paste() override {}
diff --git a/content/browser/sandbox_parameters_mac.mm b/content/browser/sandbox_parameters_mac.mm
index 86d4981..158f357a 100644
--- a/content/browser/sandbox_parameters_mac.mm
+++ b/content/browser/sandbox_parameters_mac.mm
@@ -35,6 +35,9 @@
       Sandbox::GetCanonicalSandboxPath(base::GetHomeDir()).value();
   CHECK(client->SetParameter(Sandbox::kSandboxHomedirAsLiteral, homedir));
 
+  CHECK(client->SetBooleanParameter(Sandbox::kSandboxMavericks,
+                                    base::mac::IsOS10_9()));
+
   bool elcap_or_later = base::mac::IsAtLeastOS10_11();
   CHECK(client->SetBooleanParameter(Sandbox::kSandboxElCapOrLater,
                                     elcap_or_later));
diff --git a/content/browser/web_contents/web_contents_android.cc b/content/browser/web_contents/web_contents_android.cc
index 6e28ceb..84ea2af 100644
--- a/content/browser/web_contents/web_contents_android.cc
+++ b/content/browser/web_contents/web_contents_android.cc
@@ -415,11 +415,10 @@
 void WebContentsAndroid::ScrollFocusedEditableNodeIntoView(
     JNIEnv* env,
     const JavaParamRef<jobject>& obj) {
-  RenderViewHost* host = web_contents_->GetRenderViewHost();
-  if (!host)
+  RenderFrameHostImpl* frame = web_contents_->GetFocusedFrame();
+  if (!frame)
     return;
-  host->Send(new InputMsg_ScrollFocusedEditableNodeIntoRect(
-      host->GetRoutingID(), gfx::Rect()));
+  frame->GetFrameInputHandler()->ScrollFocusedEditableNodeIntoRect(gfx::Rect());
 }
 
 void WebContentsAndroid::SelectWordAroundCaret(
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 3be78992..9738d39b 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -2753,8 +2753,18 @@
   return rfh ? rfh->GetOrCreateBrowserAccessibilityManager() : nullptr;
 }
 
+void WebContentsImpl::ExecuteEditCommand(
+    const std::string& command,
+    const base::Optional<base::string16>& value) {
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
+  if (!focused_frame)
+    return;
+
+  focused_frame->GetFrameInputHandler()->ExecuteEditCommand(command, value);
+}
+
 void WebContentsImpl::MoveRangeSelectionExtent(const gfx::Point& extent) {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
@@ -2763,16 +2773,24 @@
 
 void WebContentsImpl::SelectRange(const gfx::Point& base,
                                   const gfx::Point& extent) {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
   focused_frame->GetFrameInputHandler()->SelectRange(base, extent);
 }
 
+void WebContentsImpl::MoveCaret(const gfx::Point& extent) {
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
+  if (!focused_frame)
+    return;
+
+  focused_frame->GetFrameInputHandler()->MoveCaret(extent);
+}
+
 void WebContentsImpl::AdjustSelectionByCharacterOffset(int start_adjust,
                                                        int end_adjust) {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
@@ -2953,7 +2971,7 @@
 }
 
 void WebContentsImpl::Undo() {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
@@ -2962,7 +2980,7 @@
 }
 
 void WebContentsImpl::Redo() {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
   focused_frame->GetFrameInputHandler()->Redo();
@@ -2970,7 +2988,7 @@
 }
 
 void WebContentsImpl::Cut() {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
@@ -2979,7 +2997,7 @@
 }
 
 void WebContentsImpl::Copy() {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
@@ -2989,7 +3007,7 @@
 
 void WebContentsImpl::CopyToFindPboard() {
 #if defined(OS_MACOSX)
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
@@ -3000,7 +3018,7 @@
 }
 
 void WebContentsImpl::Paste() {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
@@ -3009,7 +3027,7 @@
 }
 
 void WebContentsImpl::PasteAndMatchStyle() {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
@@ -3018,7 +3036,7 @@
 }
 
 void WebContentsImpl::Delete() {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
@@ -3027,7 +3045,7 @@
 }
 
 void WebContentsImpl::SelectAll() {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
@@ -3036,7 +3054,7 @@
 }
 
 void WebContentsImpl::CollapseSelection() {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
@@ -3044,7 +3062,7 @@
 }
 
 void WebContentsImpl::Replace(const base::string16& word) {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
@@ -3052,7 +3070,7 @@
 }
 
 void WebContentsImpl::ReplaceMisspelling(const base::string16& word) {
-  RenderFrameHost* focused_frame = GetFocusedFrame();
+  RenderFrameHostImpl* focused_frame = GetFocusedFrame();
   if (!focused_frame)
     return;
 
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 12b4c25..db555e4 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -691,8 +691,11 @@
   // void Copy() override;
   // void Paste() override;
   // void SelectAll() override;
+  void ExecuteEditCommand(const std::string& command,
+                          const base::Optional<base::string16>& value) override;
   void MoveRangeSelectionExtent(const gfx::Point& extent) override;
   void SelectRange(const gfx::Point& base, const gfx::Point& extent) override;
+  void MoveCaret(const gfx::Point& extent) override;
   void AdjustSelectionByCharacterOffset(int start_adjust, int end_adjust)
       override;
   RenderWidgetHostInputEventRouter* GetInputEventRouter() override;
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index bfff5707..d80a199 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -266,15 +266,6 @@
   if (command_line.HasSwitch(switches::kEnableSlimmingPaintV2))
     WebRuntimeFeatures::EnableSlimmingPaintV2(true);
 
-  WebRuntimeFeatures::EnableSlimmingPaintInvalidation(
-      base::FeatureList::IsEnabled(features::kSlimmingPaintInvalidation));
-
-  if (command_line.HasSwitch(switches::kEnableSlimmingPaintInvalidation))
-    WebRuntimeFeatures::EnableSlimmingPaintInvalidation(true);
-
-  if (command_line.HasSwitch(switches::kDisableSlimmingPaintInvalidation))
-    WebRuntimeFeatures::EnableSlimmingPaintInvalidation(false);
-
   if (base::FeatureList::IsEnabled(features::kDocumentWriteEvaluator))
     WebRuntimeFeatures::EnableDocumentWriteEvaluator(true);
 
diff --git a/content/common/indexed_db/indexed_db.mojom b/content/common/indexed_db/indexed_db.mojom
index 16b8e9a..786b6e5 100644
--- a/content/common/indexed_db/indexed_db.mojom
+++ b/content/common/indexed_db/indexed_db.mojom
@@ -90,6 +90,11 @@
   VersionChange,
 };
 
+enum CompactionStatus {
+  OK,
+  Error,
+};
+
 struct IndexMetadata {
   int64 id;
   mojo.common.mojom.String16 name;
@@ -330,4 +335,5 @@
        mojo.common.mojom.String16 name, int64 version, int64 transaction_id);
   DeleteDatabase(associated Callbacks callbacks, url.mojom.Origin origin,
                  mojo.common.mojom.String16 name, bool force_close);
+  AbortTransactionsAndCompactDatabase(url.mojom.Origin origin) => (CompactionStatus status);
 };
diff --git a/content/common/input/input_handler.mojom b/content/common/input/input_handler.mojom
index fae10f96..39cc748 100644
--- a/content/common/input/input_handler.mojom
+++ b/content/common/input/input_handler.mojom
@@ -4,12 +4,207 @@
 
 module content.mojom;
 
+import "content/common/native_types.mojom";
 import "mojo/common/string16.mojom";
 import "services/ui/public/interfaces/ime/ime.mojom";
+import "ui/events/mojo/event.mojom";
+import "ui/events/mojo/event_constants.mojom";
+import "ui/latency/mojo/latency_info.mojom";
 import "ui/gfx/geometry/mojo/geometry.mojom";
+import "ui/gfx/range/mojo/range.mojom";
+
+
+// These structs are purposely duplicated from ui/events/mojom/event.mojom.
+// They map WebInputEvent <-> WebInputEvent across mojo.
+// We have to work at unifying them. The current problem is that the browser
+// uses WebInputEvents inside the render widget host and input router. Once
+// we move these to ui::Event's then we can get rid of these duplicated
+// mojom structs. Ideally the browser would use ui::Event up until we
+// pass the events into the renderer and just use a StructTraits to perform
+// conversion from ui::mojom::Event --> blink::WebInputEvent.
+struct KeyData {
+  int32 dom_key;
+  int32 dom_code;
+  int32 windows_key_code;
+  int32 native_key_code;
+  bool is_system_key;
+  bool is_browser_shortcut;
+  mojo.common.mojom.String16 text;
+  mojo.common.mojom.String16 unmodified_text;
+};
+
+struct PointerData {
+  int32 pointer_id;
+  float force;
+  int32 tilt_x;
+  int32 tilt_y;
+  float tangential_pressure;
+  int32 twist;
+  Button button;
+  PointerType pointer_type;
+  int32 movement_x;
+  int32 movement_y;
+  gfx.mojom.PointF widget_position;
+  gfx.mojom.PointF screen_position;
+  MouseData? mouse_data;
+};
+
+struct WheelData {
+  float delta_x;
+  float delta_y;
+  float wheel_ticks_x;
+  float wheel_ticks_y;
+  float acceleration_ratio_x;
+  float acceleration_ratio_y;
+  int32 resending_plugin_id;
+  uint8 phase;
+  uint8 momentum_phase;
+  bool scroll_by_page;
+  bool has_precise_scrolling_deltas;
+  Cancelability cancelable;
+};
+
+struct MouseData {
+  int32 click_count;
+  WheelData? wheel_data;
+};
+
+struct ScrollUpdate {
+  float velocity_x;
+  float velocity_y;
+  bool previous_update_in_sequence_prevented;
+  bool prevent_propagation;
+};
+
+struct ScrollData {
+  float delta_x;
+  float delta_y;
+  ScrollUnits delta_units;
+  bool target_viewport;
+  InertialPhaseState inertial_phase;
+  bool synthetic;
+  int32 pointer_count;
+  ScrollUpdate? update_details;
+};
+
+struct PinchData {
+  bool zoom_disabled;
+  float scale;
+};
+
+struct FlingData {
+  float velocity_x;
+  float velocity_y;
+  bool target_viewport;
+  bool prevent_boosting;
+};
+
+struct TapData {
+  int32 tap_count;
+};
+
+struct GestureData {
+  gfx.mojom.PointF screen_position;
+  gfx.mojom.PointF widget_position;
+  GestureDevice source_device;
+  int32 unique_touch_event_id;
+  int32 resending_plugin_id;
+  gfx.mojom.Size? contact_size;
+  ScrollData? scroll_data;
+  PinchData? pinch_data;
+  TapData? tap_data;
+  FlingData? fling_data;
+};
+
+struct TouchPoint {
+  TouchState state;
+  float radius_x;
+  float radius_y;
+  float rotation_angle;
+  PointerData pointer_data;
+};
+
+struct TouchData {
+  Cancelability cancelable;
+  bool moved_beyond_slop_region;
+  bool touch_start_or_first_move;
+  uint32 unique_touch_event_id;
+  array<TouchPoint> touches;
+};
+
+struct Event {
+  EventType type;
+  int32 modifiers;
+  double timestamp_seconds;
+  ui.mojom.LatencyInfo latency;
+  KeyData? key_data;
+  PointerData? pointer_data;
+  GestureData? gesture_data;
+  TouchData? touch_data;
+};
 
 interface WidgetInputHandler {
-  // TODO(dtapuska): Implement me.
+  // Tells widget focus has been changed.
+  SetFocus(bool focused);
+
+  // Tells widget mouse capture has been lost.
+  MouseCaptureLost();
+
+  // This message notifies the renderer that the next key event is bound to one
+  // or more pre-defined edit commands. If the next key event is not handled
+  // by webkit, the specified edit commands shall be executed against current
+  // focused frame.
+  // Parameters
+  // * edit_commands (see chrome/common/edit_command_types.h)
+  //   Contains one or more edit commands.
+  // See third_party/WebKit/Source/WebCore/editing/EditorCommand.cpp for
+  // detailed definition of webkit edit commands.
+  //
+  // This message must be sent just before sending a key event.
+
+  SetEditCommandsForNextKeyEvent(array<content.mojom.EditCommand> commands);
+
+  // Sends the cursor visibility state to the render widget.
+  CursorVisibilityChanged(bool visible);
+
+  // This message sends a string being composed with an input method.
+  ImeSetComposition(mojo.common.mojom.String16 text,
+                    array<ui.mojom.CompositionUnderline> underlines,
+                    gfx.mojom.Range range, int32 start, int32 end);
+
+  // This message deletes the current composition, inserts specified text, and
+  // moves the cursor.
+  ImeCommitText(mojo.common.mojom.String16 text,
+                array<ui.mojom.CompositionUnderline> underlines,
+                gfx.mojom.Range range, int32 relative_cursor_position);
+
+  // This message inserts the ongoing composition.
+  ImeFinishComposingText(bool keep_selection);
+
+  // Request from browser to update text input state.
+  RequestTextInputStateUpdate();
+
+  // Request from browser to update the cursor and composition information which
+  // will be sent through InputHostMsg_ImeCompositionRangeChanged. Setting
+  // |immediate_request| to true  will lead to an immediate update. If
+  // |monitor_updates| is set to true then changes to text selection or regular
+  // updates in each compositor frame (when there is a change in composition
+  // info) will lead to updates being sent to the browser.
+  RequestCompositionUpdates(bool immediate_request, bool monitor_request);
+
+  // Sends an input event to the render widget. The browser should use this
+  // API if it wants to know about the result of the rendering handling
+  // the event. The callback may be delayed based on the event running on
+  // the main thread so DispatchNonBlockingEvent is always preferred if
+  // you don't require notification.
+  DispatchEvent(Event event)
+      => (InputEventAckSource source, ui.mojom.LatencyInfo updated_latency,
+         InputEventAckState state, DidOverscrollParams? overscroll);
+
+  // Sends a non-blocking input event to the render widget. The behaviour
+  // of this API is the same as DispatchEvent just that there is no callback
+  // after the event is processed.
+  DispatchNonBlockingEvent(Event event);
 };
 
 // This interface provides the input actions associated with the RenderFrame.
@@ -79,6 +274,14 @@
   // Expects a MoveRangeSelectionExtent_ACK message when finished.
   MoveRangeSelectionExtent(gfx.mojom.Point extent);
 
+  // Tells the renderer to scroll the currently focused node into rect only if
+  // the currently focused node is a Text node (textfield, text area or content
+  // editable divs).
+  ScrollFocusedEditableNodeIntoRect(gfx.mojom.Rect rect);
+
+  // Requests the renderer to move the caret selection toward the point.
+  MoveCaret(gfx.mojom.Point point);
+
   // TODO(dtapuska): Implement WidgetInputHandler.
   // GetWidgetInputHandler(associated WidgetInputHandler& interface_request);
 };
diff --git a/content/common/input_messages.h b/content/common/input_messages.h
index 6d4ce02..a28a307 100644
--- a/content/common/input_messages.h
+++ b/content/common/input_messages.h
@@ -70,6 +70,17 @@
                               blink::WebPointerProperties::Button::kLastEntry)
 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebPointerProperties::PointerType,
                           blink::WebPointerProperties::PointerType::kLastEntry)
+IPC_ENUM_TRAITS_MAX_VALUE(blink::WebGestureDevice,
+                          (blink::WebGestureDevice::kWebGestureDeviceCount - 1))
+IPC_ENUM_TRAITS_MAX_VALUE(blink::WebInputEvent::DispatchType,
+                          blink::WebInputEvent::DispatchType::kLastDispatchType)
+IPC_ENUM_TRAITS_MAX_VALUE(blink::WebGestureEvent::ScrollUnits,
+                          blink::WebGestureEvent::ScrollUnits::kLastScrollUnit)
+IPC_ENUM_TRAITS_MAX_VALUE(
+    blink::WebGestureEvent::InertialPhaseState,
+    blink::WebGestureEvent::InertialPhaseState::kLastPhase)
+IPC_ENUM_TRAITS_MAX_VALUE(blink::WebTouchPoint::State,
+                          blink::WebTouchPoint::State::kStateMax)
 
 IPC_STRUCT_TRAITS_BEGIN(ui::DidOverscrollParams)
   IPC_STRUCT_TRAITS_MEMBER(accumulated_overscroll)
diff --git a/content/common/native_types.mojom b/content/common/native_types.mojom
index c848b95..cd0e90f 100644
--- a/content/common/native_types.mojom
+++ b/content/common/native_types.mojom
@@ -43,3 +43,39 @@
 
 [Native]
 enum WebPopupType;
+
+[Native]
+enum Button;
+
+[Native]
+enum PointerType;
+
+[Native]
+struct EditCommand;
+
+[Native]
+enum InputEventAckState;
+
+[Native]
+enum InputEventAckSource;
+
+[Native]
+enum EventType;
+
+[Native]
+enum Cancelability;
+
+[Native]
+enum GestureDevice;
+
+[Native]
+enum ScrollUnits;
+
+[Native]
+enum InertialPhaseState;
+
+[Native]
+enum TouchState;
+
+[Native]
+struct DidOverscrollParams;
diff --git a/content/common/native_types.typemap b/content/common/native_types.typemap
index 22be41a4f..9a14d13 100644
--- a/content/common/native_types.typemap
+++ b/content/common/native_types.typemap
@@ -4,17 +4,31 @@
 
 mojom = "//content/common/native_types.mojom"
 public_headers = [
+  "//content/common/edit_command.h",
   "//content/common/frame_owner_properties.h",
   "//content/common/frame_replication_state.h",
   "//content/common/resize_params.h",
+  "//content/common/input/input_event.h",
+  "//content/common/input/input_event_ack_source.h",
+  "//content/common/input/input_event_ack_state.h",
   "//content/public/common/renderer_preferences.h",
   "//content/public/common/web_preferences.h",
   "//net/base/network_change_notifier.h",
   "//net/nqe/effective_connection_type.h",
+  "//third_party/WebKit/public/platform/WebGestureDevice.h",
+  "//third_party/WebKit/public/platform/WebGestureEvent.h",
+  "//third_party/WebKit/public/platform/WebInputEvent.h",
+  "//third_party/WebKit/public/platform/WebMouseWheelEvent.h",
+  "//third_party/WebKit/public/platform/WebPointerProperties.h",
+  "//third_party/WebKit/public/platform/WebTouchPoint.h",
   "//third_party/WebKit/public/web/WebPopupType.h",
+  "//ui/events/blink/did_overscroll_params.h",
+  "//ui/events/blink/web_input_event_traits.h",
+  "//ui/latency/ipc/latency_info_param_traits.h",
 ]
 traits_headers = [
   "//content/common/frame_messages.h",
+  "//content/common/input_messages.h",
   "//content/common/view_messages.h",
   "//content/public/common/common_param_traits.h",
 ]
@@ -40,12 +54,24 @@
   "//url/ipc:url_ipc",
 ]
 type_mappings = [
+  "content.mojom.Button=blink::WebPointerProperties::Button",
+  "content.mojom.Cancelability=blink::WebInputEvent::DispatchType",
   "content.mojom.EffectiveConnectionType=net::EffectiveConnectionType",
+  "content.mojom.EditCommand=content::EditCommand",
+  "content.mojom.EventType=blink::WebInputEvent::Type",
   "content.mojom.FrameOwnerProperties=content::FrameOwnerProperties",
   "content.mojom.FrameReplicationState=content::FrameReplicationState",
+  "content.mojom.GestureDevice=blink::WebGestureDevice",
+  "content.mojom.InertialPhaseState=blink::WebGestureEvent::InertialPhaseState",
+  "content.mojom.InputEventAckSource=content::InputEventAckSource",
+  "content.mojom.InputEventAckState=content::InputEventAckState",
   "content.mojom.NetworkConnectionType=net::NetworkChangeNotifier::ConnectionType",
+  "content.mojom.DidOverscrollParams=ui::DidOverscrollParams",
+  "content.mojom.PointerType=blink::WebPointerProperties::PointerType",
   "content.mojom.RendererPreferences=content::RendererPreferences",
   "content.mojom.ResizeParams=content::ResizeParams",
+  "content.mojom.ScrollUnits=blink::WebGestureEvent::ScrollUnits",
+  "content.mojom.TouchState=blink::WebTouchPoint::State",
   "content.mojom.WebPopupType=blink::WebPopupType",
   "content.mojom.WebPreferences=content::WebPreferences",
 ]
diff --git a/content/common/sandbox_mac.h b/content/common/sandbox_mac.h
index c6a7c1fc..f4dde38 100644
--- a/content/common/sandbox_mac.h
+++ b/content/common/sandbox_mac.h
@@ -52,6 +52,7 @@
   static const char* kSandboxDisableDenialLogging;
   static const char* kSandboxHomedirAsLiteral;
   static const char* kSandboxElCapOrLater;
+  static const char* kSandboxMavericks;
   static const char* kSandboxPermittedDir;
   static const char* kSandboxBundlePath;
   static const char* kSandboxLoggingPathAsLiteral;
diff --git a/content/common/sandbox_mac.mm b/content/common/sandbox_mac.mm
index ec0ea7dc..49886fde 100644
--- a/content/common/sandbox_mac.mm
+++ b/content/common/sandbox_mac.mm
@@ -79,6 +79,7 @@
     "DISABLE_SANDBOX_DENIAL_LOGGING";
 const char* Sandbox::kSandboxHomedirAsLiteral = "USER_HOMEDIR_AS_LITERAL";
 const char* Sandbox::kSandboxElCapOrLater = "ELCAP_OR_LATER";
+const char* Sandbox::kSandboxMavericks = "IS_MAVERICKS";
 const char* Sandbox::kSandboxPermittedDir = "PERMITTED_DIR";
 const char* Sandbox::kSandboxBundlePath = "BUNDLE_PATH";
 const char* Sandbox::kSandboxLoggingPathAsLiteral = "LOG_FILE_PATH";
diff --git a/content/public/android/java/src/org/chromium/content/browser/SpareChildConnection.java b/content/public/android/java/src/org/chromium/content/browser/SpareChildConnection.java
index 79e20c3..dec2322a 100644
--- a/content/public/android/java/src/org/chromium/content/browser/SpareChildConnection.java
+++ b/content/public/android/java/src/org/chromium/content/browser/SpareChildConnection.java
@@ -111,7 +111,10 @@
 
     /** Returns true if no connection is available (so getConnection will always return null), */
     public boolean isEmpty() {
-        return mConnection == null;
+        // Note that if the connection was retrieved but was not yet ready mConnection is non null
+        // but that connection is already used and will be cleared when it becomes ready. In that
+        // case mConnectionServiceCallback is non null.
+        return mConnection == null || mConnectionServiceCallback != null;
     }
 
     private void clearConnection() {
diff --git a/content/public/android/junit/src/org/chromium/content/browser/SpareChildConnectionTest.java b/content/public/android/junit/src/org/chromium/content/browser/SpareChildConnectionTest.java
index 1779db5..2482297 100644
--- a/content/public/android/junit/src/org/chromium/content/browser/SpareChildConnectionTest.java
+++ b/content/public/android/junit/src/org/chromium/content/browser/SpareChildConnectionTest.java
@@ -8,8 +8,10 @@
 import android.content.Context;
 import android.os.Bundle;
 
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -141,10 +143,16 @@
     public void testCallbackCalledConnectionReady() {
         mTestConnectionFactory.simulateConnectionBindingSuccessfully();
 
+        assertFalse(mSpareConnection.isEmpty());
+
         // Now retrieve the connection, the callback should be invoked.
         ChildProcessConnection connection =
                 mSpareConnection.getConnection(mConnectionAllocator, mServiceCallback);
         assertNotNull(connection);
+
+        // No more connections are available.
+        assertTrue(mSpareConnection.isEmpty());
+
         ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
         verify(mServiceCallback, times(1)).onChildStarted();
         verify(mServiceCallback, times(0)).onChildStartFailed();
@@ -153,6 +161,8 @@
     @Test
     @Feature({"ProcessManagement"})
     public void testCallbackCalledConnectionNotReady() {
+        assertFalse(mSpareConnection.isEmpty());
+
         // Retrieve the connection before it's bound.
         ChildProcessConnection connection =
                 mSpareConnection.getConnection(mConnectionAllocator, mServiceCallback);
@@ -162,6 +172,9 @@
         verify(mServiceCallback, times(0)).onChildStarted();
         verify(mServiceCallback, times(0)).onChildStartFailed();
 
+        // No more connections are available.
+        assertTrue(mSpareConnection.isEmpty());
+
         // Simulate the connection getting bound, it should trigger the callback.
         mTestConnectionFactory.simulateConnectionBindingSuccessfully();
         verify(mServiceCallback, times(1)).onChildStarted();
diff --git a/content/public/browser/render_frame_host.h b/content/public/browser/render_frame_host.h
index 49baa59..4bcf78b6 100644
--- a/content/public/browser/render_frame_host.h
+++ b/content/public/browser/render_frame_host.h
@@ -10,7 +10,6 @@
 #include "base/callback_forward.h"
 #include "build/build_config.h"
 #include "content/common/content_export.h"
-#include "content/common/input/input_handler.mojom.h"
 #include "content/public/common/console_message_level.h"
 #include "content/public/common/file_chooser_params.h"
 #include "ipc/ipc_listener.h"
@@ -43,6 +42,7 @@
 }
 
 namespace content {
+
 class AssociatedInterfaceProvider;
 class RenderProcessHost;
 class RenderViewHost;
@@ -284,8 +284,6 @@
   // process to determine whether access to a feature is allowed.
   virtual bool IsFeatureEnabled(blink::WebFeaturePolicyFeature feature) = 0;
 
-  virtual mojom::FrameInputHandler* GetFrameInputHandler() = 0;
-
  private:
   // This interface should only be implemented inside content.
   friend class RenderFrameHostImpl;
diff --git a/content/public/test/text_input_test_utils.cc b/content/public/test/text_input_test_utils.cc
index 19527714..442ddea6 100644
--- a/content/public/test/text_input_test_utils.cc
+++ b/content/public/test/text_input_test_utils.cc
@@ -279,15 +279,8 @@
     const std::vector<ui::CompositionUnderline>& underlines,
     const gfx::Range& replacement_range,
     int relative_cursor_pos) {
-  std::vector<blink::WebCompositionUnderline> web_composition_underlines;
-  for (auto underline : underlines) {
-    web_composition_underlines.emplace_back(
-        static_cast<int>(underline.start_offset),
-        static_cast<int>(underline.end_offset), underline.color,
-        underline.thick, underline.background_color);
-  }
   RenderWidgetHostImpl::From(rwh)->ImeCommitText(
-      text, web_composition_underlines, replacement_range, relative_cursor_pos);
+      text, underlines, replacement_range, relative_cursor_pos);
 }
 
 void SendImeSetCompositionTextToWidget(
@@ -297,16 +290,8 @@
     const gfx::Range& replacement_range,
     int selection_start,
     int selection_end) {
-  std::vector<blink::WebCompositionUnderline> web_composition_underlines;
-  for (auto underline : underlines) {
-    web_composition_underlines.emplace_back(
-        static_cast<int>(underline.start_offset),
-        static_cast<int>(underline.end_offset), underline.color,
-        underline.thick, underline.background_color);
-  }
   RenderWidgetHostImpl::From(rwh)->ImeSetComposition(
-      text, web_composition_underlines, replacement_range, selection_start,
-      selection_end);
+      text, underlines, replacement_range, selection_start, selection_end);
 }
 
 bool DestroyRenderWidgetHost(int32_t process_id,
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index b42c495a..ca2c49f 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -231,6 +231,8 @@
     "media/cdm/ppapi_decryptor.h",
     "media/cdm/render_cdm_factory.cc",
     "media/cdm/render_cdm_factory.h",
+    "media/gpu/gpu_video_accelerator_factories_impl.cc",
+    "media/gpu/gpu_video_accelerator_factories_impl.h",
     "media/media_factory.cc",
     "media/media_factory.h",
     "media/media_permission_dispatcher.cc",
@@ -243,8 +245,6 @@
     "media/render_media_client.h",
     "media/render_media_log.cc",
     "media/render_media_log.h",
-    "media/renderer_gpu_video_accelerator_factories.cc",
-    "media/renderer_gpu_video_accelerator_factories.h",
     "media/renderer_webaudiodevice_impl.cc",
     "media/renderer_webaudiodevice_impl.h",
     "media/renderer_webmediaplayer_delegate.cc",
diff --git a/content/renderer/input/frame_input_handler_impl.cc b/content/renderer/input/frame_input_handler_impl.cc
index 79be471..52c00fa 100644
--- a/content/renderer/input/frame_input_handler_impl.cc
+++ b/content/renderer/input/frame_input_handler_impl.cc
@@ -337,6 +337,37 @@
       render_frame_->render_view()->ConvertWindowPointToViewport(extent));
 }
 
+void FrameInputHandlerImpl::ScrollFocusedEditableNodeIntoRect(
+    const gfx::Rect& rect) {
+  if (!main_thread_task_runner_->BelongsToCurrentThread()) {
+    RunOnMainThread(
+        base::Bind(&FrameInputHandlerImpl::ScrollFocusedEditableNodeIntoRect,
+                   weak_this_, rect));
+    return;
+  }
+
+  if (!render_frame_)
+    return;
+
+  RenderViewImpl* render_view = render_frame_->render_view();
+  render_view->ScrollFocusedEditableNodeIntoRect(rect);
+}
+
+void FrameInputHandlerImpl::MoveCaret(const gfx::Point& point) {
+  if (!main_thread_task_runner_->BelongsToCurrentThread()) {
+    RunOnMainThread(
+        base::Bind(&FrameInputHandlerImpl::MoveCaret, weak_this_, point));
+    return;
+  }
+
+  if (!render_frame_)
+    return;
+
+  RenderViewImpl* render_view = render_frame_->render_view();
+  render_frame_->GetWebFrame()->MoveCaretSelection(
+      render_view->ConvertWindowPointToViewport(point));
+}
+
 void FrameInputHandlerImpl::ExecuteCommandOnMainThread(
     const std::string& command,
     UpdateState update_state) {
diff --git a/content/renderer/input/frame_input_handler_impl.h b/content/renderer/input/frame_input_handler_impl.h
index 9c756029..66ca5e43 100644
--- a/content/renderer/input/frame_input_handler_impl.h
+++ b/content/renderer/input/frame_input_handler_impl.h
@@ -68,6 +68,8 @@
   void SelectRange(const gfx::Point& base, const gfx::Point& extent) override;
   void AdjustSelectionByCharacterOffset(int32_t start, int32_t end) override;
   void MoveRangeSelectionExtent(const gfx::Point& extent) override;
+  void ScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect) override;
+  void MoveCaret(const gfx::Point& point) override;
 
  private:
   ~FrameInputHandlerImpl() override;
diff --git a/content/renderer/media/gpu/OWNERS b/content/renderer/media/gpu/OWNERS
index a1be1928..409778d 100644
--- a/content/renderer/media/gpu/OWNERS
+++ b/content/renderer/media/gpu/OWNERS
@@ -1,2 +1,6 @@
 posciak@chromium.org
 wuchengli@chromium.org
+
+per-file gpu_*=file://media/gpu/OWNERS
+
+# COMPONENT: Internals>GPU>Video
diff --git a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.cc b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.cc
new file mode 100644
index 0000000..4d2c678
--- /dev/null
+++ b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.cc
@@ -0,0 +1,347 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h"
+
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+
+#include "base/bind.h"
+#include "base/memory/ptr_util.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/unguessable_token.h"
+#include "cc/output/context_provider.h"
+#include "content/child/child_thread_impl.h"
+#include "content/renderer/render_thread_impl.h"
+#include "gpu/command_buffer/client/gles2_interface.h"
+#include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
+#include "gpu/ipc/client/gpu_channel_host.h"
+#include "media/gpu/gpu_video_accelerator_util.h"
+#include "media/gpu/ipc/client/gpu_video_decode_accelerator_host.h"
+#include "media/gpu/ipc/client/gpu_video_encode_accelerator_host.h"
+#include "media/gpu/ipc/common/media_messages.h"
+#include "media/video/video_decode_accelerator.h"
+#include "media/video/video_encode_accelerator.h"
+#include "services/ui/public/cpp/gpu/context_provider_command_buffer.h"
+
+namespace content {
+
+namespace {
+
+// This enum values match ContextProviderPhase in histograms.xml
+enum ContextProviderPhase {
+  CONTEXT_PROVIDER_ACQUIRED = 0,
+  CONTEXT_PROVIDER_RELEASED = 1,
+  CONTEXT_PROVIDER_RELEASED_MAX_VALUE = CONTEXT_PROVIDER_RELEASED,
+};
+
+void RecordContextProviderPhaseUmaEnum(const ContextProviderPhase phase) {
+  UMA_HISTOGRAM_ENUMERATION("Media.GPU.HasEverLostContext", phase,
+                            CONTEXT_PROVIDER_RELEASED_MAX_VALUE + 1);
+}
+
+}  // namespace
+
+// static
+std::unique_ptr<GpuVideoAcceleratorFactoriesImpl>
+GpuVideoAcceleratorFactoriesImpl::Create(
+    scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
+    const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner,
+    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+    const scoped_refptr<ui::ContextProviderCommandBuffer>& context_provider,
+    bool enable_gpu_memory_buffer_video_frames,
+    const cc::BufferToTextureTargetMap& image_texture_targets,
+    bool enable_video_accelerator) {
+  RecordContextProviderPhaseUmaEnum(
+      ContextProviderPhase::CONTEXT_PROVIDER_ACQUIRED);
+  return base::WrapUnique(new GpuVideoAcceleratorFactoriesImpl(
+      std::move(gpu_channel_host), main_thread_task_runner, task_runner,
+      context_provider, enable_gpu_memory_buffer_video_frames,
+      image_texture_targets, enable_video_accelerator));
+}
+
+GpuVideoAcceleratorFactoriesImpl::GpuVideoAcceleratorFactoriesImpl(
+    scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
+    const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner,
+    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+    const scoped_refptr<ui::ContextProviderCommandBuffer>& context_provider,
+    bool enable_gpu_memory_buffer_video_frames,
+    const cc::BufferToTextureTargetMap& image_texture_targets,
+    bool enable_video_accelerator)
+    : main_thread_task_runner_(main_thread_task_runner),
+      task_runner_(task_runner),
+      gpu_channel_host_(std::move(gpu_channel_host)),
+      context_provider_refptr_(context_provider),
+      context_provider_(context_provider.get()),
+      enable_gpu_memory_buffer_video_frames_(
+          enable_gpu_memory_buffer_video_frames),
+      image_texture_targets_(image_texture_targets),
+      video_accelerator_enabled_(enable_video_accelerator),
+      gpu_memory_buffer_manager_(
+          RenderThreadImpl::current()->GetGpuMemoryBufferManager()),
+      thread_safe_sender_(ChildThreadImpl::current()->thread_safe_sender()) {
+  DCHECK(main_thread_task_runner_);
+  DCHECK(gpu_channel_host_);
+}
+
+GpuVideoAcceleratorFactoriesImpl::~GpuVideoAcceleratorFactoriesImpl() {}
+
+bool GpuVideoAcceleratorFactoriesImpl::CheckContextLost() {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  if (context_provider_) {
+    bool release_context_provider = false;
+    {
+      cc::ContextProvider::ScopedContextLock lock(context_provider_);
+      if (lock.ContextGL()->GetGraphicsResetStatusKHR() != GL_NO_ERROR) {
+        context_provider_ = nullptr;
+        release_context_provider = true;
+      }
+    }
+    if (release_context_provider) {
+      // Drop the reference on the main thread.
+      main_thread_task_runner_->PostTask(
+          FROM_HERE,
+          base::Bind(&GpuVideoAcceleratorFactoriesImpl::ReleaseContextProvider,
+                     base::Unretained(this)));
+    }
+  }
+  return !context_provider_;
+}
+
+bool GpuVideoAcceleratorFactoriesImpl::IsGpuVideoAcceleratorEnabled() {
+  return video_accelerator_enabled_;
+}
+
+base::UnguessableToken GpuVideoAcceleratorFactoriesImpl::GetChannelToken() {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  if (CheckContextLost())
+    return base::UnguessableToken();
+
+  if (channel_token_.is_empty()) {
+    context_provider_->GetCommandBufferProxy()->channel()->Send(
+        new GpuCommandBufferMsg_GetChannelToken(&channel_token_));
+  }
+
+  return channel_token_;
+}
+
+int32_t GpuVideoAcceleratorFactoriesImpl::GetCommandBufferRouteId() {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  if (CheckContextLost())
+    return 0;
+  return context_provider_->GetCommandBufferProxy()->route_id();
+}
+
+std::unique_ptr<media::VideoDecodeAccelerator>
+GpuVideoAcceleratorFactoriesImpl::CreateVideoDecodeAccelerator() {
+  DCHECK(video_accelerator_enabled_);
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  if (CheckContextLost())
+    return nullptr;
+
+  return std::unique_ptr<media::VideoDecodeAccelerator>(
+      new media::GpuVideoDecodeAcceleratorHost(
+          context_provider_->GetCommandBufferProxy()));
+}
+
+std::unique_ptr<media::VideoEncodeAccelerator>
+GpuVideoAcceleratorFactoriesImpl::CreateVideoEncodeAccelerator() {
+  DCHECK(video_accelerator_enabled_);
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  if (CheckContextLost())
+    return nullptr;
+
+  return std::unique_ptr<media::VideoEncodeAccelerator>(
+      new media::GpuVideoEncodeAcceleratorHost(
+          context_provider_->GetCommandBufferProxy()));
+}
+
+bool GpuVideoAcceleratorFactoriesImpl::CreateTextures(
+    int32_t count,
+    const gfx::Size& size,
+    std::vector<uint32_t>* texture_ids,
+    std::vector<gpu::Mailbox>* texture_mailboxes,
+    uint32_t texture_target) {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  DCHECK(texture_target);
+
+  if (CheckContextLost())
+    return false;
+  cc::ContextProvider::ScopedContextLock lock(context_provider_);
+  gpu::gles2::GLES2Interface* gles2 = lock.ContextGL();
+  texture_ids->resize(count);
+  texture_mailboxes->resize(count);
+  gles2->GenTextures(count, &texture_ids->at(0));
+  for (int i = 0; i < count; ++i) {
+    gles2->ActiveTexture(GL_TEXTURE0);
+    uint32_t texture_id = texture_ids->at(i);
+    gles2->BindTexture(texture_target, texture_id);
+    gles2->TexParameteri(texture_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+    gles2->TexParameteri(texture_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+    gles2->TexParameteri(texture_target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+    gles2->TexParameteri(texture_target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+    if (texture_target == GL_TEXTURE_2D) {
+      gles2->TexImage2D(texture_target, 0, GL_RGBA, size.width(), size.height(),
+                        0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+    }
+    gles2->GenMailboxCHROMIUM(texture_mailboxes->at(i).name);
+    gles2->ProduceTextureCHROMIUM(texture_target,
+                                  texture_mailboxes->at(i).name);
+  }
+
+  // We need ShallowFlushCHROMIUM() here to order the command buffer commands
+  // with respect to IPC to the GPU process, to guarantee that the decoder in
+  // the GPU process can use these textures as soon as it receives IPC
+  // notification of them.
+  gles2->ShallowFlushCHROMIUM();
+  DCHECK_EQ(gles2->GetError(), static_cast<GLenum>(GL_NO_ERROR));
+  return true;
+}
+
+void GpuVideoAcceleratorFactoriesImpl::DeleteTexture(uint32_t texture_id) {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  if (CheckContextLost())
+    return;
+
+  cc::ContextProvider::ScopedContextLock lock(context_provider_);
+  gpu::gles2::GLES2Interface* gles2 = lock.ContextGL();
+  gles2->DeleteTextures(1, &texture_id);
+  DCHECK_EQ(gles2->GetError(), static_cast<GLenum>(GL_NO_ERROR));
+}
+
+gpu::SyncToken GpuVideoAcceleratorFactoriesImpl::CreateSyncToken() {
+  cc::ContextProvider::ScopedContextLock lock(context_provider_);
+  gpu::gles2::GLES2Interface* gl = lock.ContextGL();
+  gpu::SyncToken sync_token;
+  const GLuint64 fence_sync = gl->InsertFenceSyncCHROMIUM();
+  gl->ShallowFlushCHROMIUM();
+  gl->GenSyncTokenCHROMIUM(fence_sync, sync_token.GetData());
+  return sync_token;
+}
+
+void GpuVideoAcceleratorFactoriesImpl::WaitSyncToken(
+    const gpu::SyncToken& sync_token) {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  if (CheckContextLost())
+    return;
+
+  cc::ContextProvider::ScopedContextLock lock(context_provider_);
+  gpu::gles2::GLES2Interface* gles2 = lock.ContextGL();
+  gles2->WaitSyncTokenCHROMIUM(sync_token.GetConstData());
+
+  // Callers expect the WaitSyncToken to affect the next IPCs. Make sure to
+  // flush the command buffers to ensure that.
+  gles2->ShallowFlushCHROMIUM();
+}
+
+void GpuVideoAcceleratorFactoriesImpl::ShallowFlushCHROMIUM() {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  if (CheckContextLost())
+    return;
+
+  cc::ContextProvider::ScopedContextLock lock(context_provider_);
+  gpu::gles2::GLES2Interface* gles2 = lock.ContextGL();
+  gles2->ShallowFlushCHROMIUM();
+}
+
+std::unique_ptr<gfx::GpuMemoryBuffer>
+GpuVideoAcceleratorFactoriesImpl::CreateGpuMemoryBuffer(
+    const gfx::Size& size,
+    gfx::BufferFormat format,
+    gfx::BufferUsage usage) {
+  std::unique_ptr<gfx::GpuMemoryBuffer> buffer =
+      gpu_memory_buffer_manager_->CreateGpuMemoryBuffer(
+          size, format, usage, gpu::kNullSurfaceHandle);
+  return buffer;
+}
+bool GpuVideoAcceleratorFactoriesImpl::ShouldUseGpuMemoryBuffersForVideoFrames()
+    const {
+  return enable_gpu_memory_buffer_video_frames_;
+}
+
+unsigned GpuVideoAcceleratorFactoriesImpl::ImageTextureTarget(
+    gfx::BufferFormat format) {
+  auto found = image_texture_targets_.find(cc::BufferToTextureTargetKey(
+      gfx::BufferUsage::GPU_READ_CPU_READ_WRITE, format));
+  DCHECK(found != image_texture_targets_.end());
+  return found->second;
+}
+
+media::GpuVideoAcceleratorFactories::OutputFormat
+GpuVideoAcceleratorFactoriesImpl::VideoFrameOutputFormat() {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  if (CheckContextLost())
+    return media::GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED;
+  cc::ContextProvider::ScopedContextLock lock(context_provider_);
+  auto capabilities = context_provider_->ContextCapabilities();
+  if (capabilities.image_ycbcr_420v)
+    return media::GpuVideoAcceleratorFactories::OutputFormat::NV12_SINGLE_GMB;
+  if (capabilities.image_ycbcr_422)
+    return media::GpuVideoAcceleratorFactories::OutputFormat::UYVY;
+  if (capabilities.texture_rg)
+    return media::GpuVideoAcceleratorFactories::OutputFormat::NV12_DUAL_GMB;
+  return media::GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED;
+}
+
+namespace {
+class ScopedGLContextLockImpl
+    : public media::GpuVideoAcceleratorFactories::ScopedGLContextLock {
+ public:
+  ScopedGLContextLockImpl(cc::ContextProvider* context_provider)
+      : lock_(context_provider) {}
+  gpu::gles2::GLES2Interface* ContextGL() override { return lock_.ContextGL(); }
+
+ private:
+  cc::ContextProvider::ScopedContextLock lock_;
+};
+}  // namespace
+
+std::unique_ptr<media::GpuVideoAcceleratorFactories::ScopedGLContextLock>
+GpuVideoAcceleratorFactoriesImpl::GetGLContextLock() {
+  if (CheckContextLost())
+    return nullptr;
+  return base::MakeUnique<ScopedGLContextLockImpl>(context_provider_);
+}
+
+std::unique_ptr<base::SharedMemory>
+GpuVideoAcceleratorFactoriesImpl::CreateSharedMemory(size_t size) {
+  std::unique_ptr<base::SharedMemory> mem(
+      ChildThreadImpl::AllocateSharedMemory(size));
+  if (mem && !mem->Map(size))
+    return nullptr;
+  return mem;
+}
+
+scoped_refptr<base::SingleThreadTaskRunner>
+GpuVideoAcceleratorFactoriesImpl::GetTaskRunner() {
+  return task_runner_;
+}
+
+media::VideoDecodeAccelerator::Capabilities
+GpuVideoAcceleratorFactoriesImpl::GetVideoDecodeAcceleratorCapabilities() {
+  return media::GpuVideoAcceleratorUtil::ConvertGpuToMediaDecodeCapabilities(
+      gpu_channel_host_->gpu_info().video_decode_accelerator_capabilities);
+}
+
+media::VideoEncodeAccelerator::SupportedProfiles
+GpuVideoAcceleratorFactoriesImpl::GetVideoEncodeAcceleratorSupportedProfiles() {
+  return media::GpuVideoAcceleratorUtil::ConvertGpuToMediaEncodeProfiles(
+      gpu_channel_host_->gpu_info()
+          .video_encode_accelerator_supported_profiles);
+}
+
+void GpuVideoAcceleratorFactoriesImpl::ReleaseContextProvider() {
+  DCHECK(main_thread_task_runner_->BelongsToCurrentThread());
+  RecordContextProviderPhaseUmaEnum(
+      ContextProviderPhase::CONTEXT_PROVIDER_RELEASED);
+  context_provider_refptr_ = nullptr;
+}
+
+scoped_refptr<ui::ContextProviderCommandBuffer>
+GpuVideoAcceleratorFactoriesImpl::ContextProviderMainThread() {
+  DCHECK(main_thread_task_runner_->BelongsToCurrentThread());
+  return context_provider_refptr_;
+}
+
+}  // namespace content
diff --git a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h
new file mode 100644
index 0000000..969b73f
--- /dev/null
+++ b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h
@@ -0,0 +1,144 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_RENDERER_MEDIA_GPU_GPU_VIDEO_ACCELERATOR_FACTORIES_IMPL_H_
+#define CONTENT_RENDERER_MEDIA_GPU_GPU_VIDEO_ACCELERATOR_FACTORIES_IMPL_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include <memory>
+#include <vector>
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "base/single_thread_task_runner.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/unguessable_token.h"
+#include "cc/output/buffer_to_texture_target_map.h"
+#include "content/child/thread_safe_sender.h"
+#include "content/common/content_export.h"
+#include "media/renderers/gpu_video_accelerator_factories.h"
+#include "ui/gfx/geometry/size.h"
+
+namespace gpu {
+class GpuChannelHost;
+class GpuMemoryBufferManager;
+}  // namespace gpu
+
+namespace ui {
+class ContextProviderCommandBuffer;
+}
+
+namespace content {
+
+// Glue code to expose functionality needed by media::GpuVideoAccelerator to
+// RenderViewImpl.  This class is entirely an implementation detail of
+// RenderViewImpl and only has its own header to allow extraction of its
+// implementation from render_view_impl.cc which is already far too large.
+//
+// The GpuVideoAcceleratorFactoriesImpl can be constructed on any thread,
+// but subsequent calls to all public methods of the class must be called from
+// the |task_runner_|, as provided during construction.
+class CONTENT_EXPORT GpuVideoAcceleratorFactoriesImpl
+    : public media::GpuVideoAcceleratorFactories {
+ public:
+  // Takes a ref on |gpu_channel_host| and tests |context| for loss before each
+  // use.  Safe to call from any thread.
+  static std::unique_ptr<GpuVideoAcceleratorFactoriesImpl> Create(
+      scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
+      const scoped_refptr<base::SingleThreadTaskRunner>&
+          main_thread_task_runner,
+      const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+      const scoped_refptr<ui::ContextProviderCommandBuffer>& context_provider,
+      bool enable_gpu_memory_buffer_video_frames,
+      const cc::BufferToTextureTargetMap& image_texture_targets,
+      bool enable_video_accelerator);
+
+  // media::GpuVideoAcceleratorFactories implementation.
+  bool IsGpuVideoAcceleratorEnabled() override;
+  base::UnguessableToken GetChannelToken() override;
+  int32_t GetCommandBufferRouteId() override;
+  std::unique_ptr<media::VideoDecodeAccelerator> CreateVideoDecodeAccelerator()
+      override;
+  std::unique_ptr<media::VideoEncodeAccelerator> CreateVideoEncodeAccelerator()
+      override;
+  // Creates textures and produces them into mailboxes. Returns true on success
+  // or false on failure.
+  bool CreateTextures(int32_t count,
+                      const gfx::Size& size,
+                      std::vector<uint32_t>* texture_ids,
+                      std::vector<gpu::Mailbox>* texture_mailboxes,
+                      uint32_t texture_target) override;
+  void DeleteTexture(uint32_t texture_id) override;
+  gpu::SyncToken CreateSyncToken() override;
+  void WaitSyncToken(const gpu::SyncToken& sync_token) override;
+  void ShallowFlushCHROMIUM() override;
+
+  std::unique_ptr<gfx::GpuMemoryBuffer> CreateGpuMemoryBuffer(
+      const gfx::Size& size,
+      gfx::BufferFormat format,
+      gfx::BufferUsage usage) override;
+
+  bool ShouldUseGpuMemoryBuffersForVideoFrames() const override;
+  unsigned ImageTextureTarget(gfx::BufferFormat format) override;
+  OutputFormat VideoFrameOutputFormat() override;
+  std::unique_ptr<media::GpuVideoAcceleratorFactories::ScopedGLContextLock>
+  GetGLContextLock() override;
+  bool CheckContextLost();
+  std::unique_ptr<base::SharedMemory> CreateSharedMemory(size_t size) override;
+  scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() override;
+
+  media::VideoDecodeAccelerator::Capabilities
+  GetVideoDecodeAcceleratorCapabilities() override;
+  std::vector<media::VideoEncodeAccelerator::SupportedProfile>
+  GetVideoEncodeAcceleratorSupportedProfiles() override;
+
+  void ReleaseContextProvider();
+  scoped_refptr<ui::ContextProviderCommandBuffer> ContextProviderMainThread();
+
+  ~GpuVideoAcceleratorFactoriesImpl() override;
+
+ private:
+  GpuVideoAcceleratorFactoriesImpl(
+      scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
+      const scoped_refptr<base::SingleThreadTaskRunner>&
+          main_thread_task_runner,
+      const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+      const scoped_refptr<ui::ContextProviderCommandBuffer>& context_provider,
+      bool enable_gpu_memory_buffer_video_frames,
+      const cc::BufferToTextureTargetMap& image_texture_targets,
+      bool enable_video_accelerator);
+
+  scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
+  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+  scoped_refptr<gpu::GpuChannelHost> gpu_channel_host_;
+
+  // Shared pointer to a shared context provider that should be accessed
+  // and set only on the main thread.
+  scoped_refptr<ui::ContextProviderCommandBuffer> context_provider_refptr_;
+
+  // Raw pointer to a context provider accessed from the media thread.
+  ui::ContextProviderCommandBuffer* context_provider_;
+
+  base::UnguessableToken channel_token_;
+
+  // Whether gpu memory buffers should be used to hold video frames data.
+  bool enable_gpu_memory_buffer_video_frames_;
+  const cc::BufferToTextureTargetMap image_texture_targets_;
+  // Whether video acceleration encoding/decoding should be enabled.
+  const bool video_accelerator_enabled_;
+
+  gpu::GpuMemoryBufferManager* const gpu_memory_buffer_manager_;
+
+  // For sending requests to allocate shared memory in the Browser process.
+  scoped_refptr<ThreadSafeSender> thread_safe_sender_;
+
+  DISALLOW_COPY_AND_ASSIGN(GpuVideoAcceleratorFactoriesImpl);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_MEDIA_GPU_GPU_VIDEO_ACCELERATOR_FACTORIES_IMPL_H_
diff --git a/content/renderer/media/renderer_gpu_video_accelerator_factories.cc b/content/renderer/media/renderer_gpu_video_accelerator_factories.cc
deleted file mode 100644
index 44dc391e..0000000
--- a/content/renderer/media/renderer_gpu_video_accelerator_factories.cc
+++ /dev/null
@@ -1,356 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/renderer/media/renderer_gpu_video_accelerator_factories.h"
-
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
-
-#include "base/bind.h"
-#include "base/memory/ptr_util.h"
-#include "base/metrics/histogram_macros.h"
-#include "base/unguessable_token.h"
-#include "cc/output/context_provider.h"
-#include "content/child/child_thread_impl.h"
-#include "content/renderer/render_thread_impl.h"
-#include "gpu/command_buffer/client/gles2_interface.h"
-#include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
-#include "gpu/ipc/client/gpu_channel_host.h"
-#include "media/gpu/gpu_video_accelerator_util.h"
-#include "media/gpu/ipc/client/gpu_video_decode_accelerator_host.h"
-#include "media/gpu/ipc/client/gpu_video_encode_accelerator_host.h"
-#include "media/gpu/ipc/common/media_messages.h"
-#include "media/video/video_decode_accelerator.h"
-#include "media/video/video_encode_accelerator.h"
-#include "services/ui/public/cpp/gpu/context_provider_command_buffer.h"
-
-namespace content {
-
-namespace {
-
-// This enum values match ContextProviderPhase in histograms.xml
-enum ContextProviderPhase {
-  CONTEXT_PROVIDER_ACQUIRED = 0,
-  CONTEXT_PROVIDER_RELEASED = 1,
-  CONTEXT_PROVIDER_RELEASED_MAX_VALUE = CONTEXT_PROVIDER_RELEASED,
-};
-
-void RecordContextProviderPhaseUmaEnum(const ContextProviderPhase phase) {
-  UMA_HISTOGRAM_ENUMERATION("Media.GPU.HasEverLostContext", phase,
-                            CONTEXT_PROVIDER_RELEASED_MAX_VALUE + 1);
-}
-
-}  // namespace
-
-// static
-std::unique_ptr<RendererGpuVideoAcceleratorFactories>
-RendererGpuVideoAcceleratorFactories::Create(
-    scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
-    const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner,
-    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-    const scoped_refptr<ui::ContextProviderCommandBuffer>& context_provider,
-    bool enable_gpu_memory_buffer_video_frames,
-    const cc::BufferToTextureTargetMap& image_texture_targets,
-    bool enable_video_accelerator) {
-  RecordContextProviderPhaseUmaEnum(
-      ContextProviderPhase::CONTEXT_PROVIDER_ACQUIRED);
-  return base::WrapUnique(new RendererGpuVideoAcceleratorFactories(
-      std::move(gpu_channel_host), main_thread_task_runner, task_runner,
-      context_provider, enable_gpu_memory_buffer_video_frames,
-      image_texture_targets, enable_video_accelerator));
-}
-
-RendererGpuVideoAcceleratorFactories::RendererGpuVideoAcceleratorFactories(
-    scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
-    const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner,
-    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-    const scoped_refptr<ui::ContextProviderCommandBuffer>& context_provider,
-    bool enable_gpu_memory_buffer_video_frames,
-    const cc::BufferToTextureTargetMap& image_texture_targets,
-    bool enable_video_accelerator)
-    : main_thread_task_runner_(main_thread_task_runner),
-      task_runner_(task_runner),
-      gpu_channel_host_(std::move(gpu_channel_host)),
-      context_provider_refptr_(context_provider),
-      context_provider_(context_provider.get()),
-      enable_gpu_memory_buffer_video_frames_(
-          enable_gpu_memory_buffer_video_frames),
-      image_texture_targets_(image_texture_targets),
-      video_accelerator_enabled_(enable_video_accelerator),
-      gpu_memory_buffer_manager_(
-          RenderThreadImpl::current()->GetGpuMemoryBufferManager()),
-      thread_safe_sender_(ChildThreadImpl::current()->thread_safe_sender()) {
-  DCHECK(main_thread_task_runner_);
-  DCHECK(gpu_channel_host_);
-}
-
-RendererGpuVideoAcceleratorFactories::~RendererGpuVideoAcceleratorFactories() {}
-
-bool RendererGpuVideoAcceleratorFactories::CheckContextLost() {
-  DCHECK(task_runner_->BelongsToCurrentThread());
-  if (context_provider_) {
-    bool release_context_provider = false;
-    {
-      cc::ContextProvider::ScopedContextLock lock(context_provider_);
-      if (lock.ContextGL()->GetGraphicsResetStatusKHR() != GL_NO_ERROR) {
-        context_provider_ = nullptr;
-        release_context_provider = true;
-      }
-    }
-    if (release_context_provider) {
-      // Drop the reference on the main thread.
-      main_thread_task_runner_->PostTask(
-          FROM_HERE,
-          base::Bind(
-              &RendererGpuVideoAcceleratorFactories::ReleaseContextProvider,
-              base::Unretained(this)));
-    }
-  }
-  return !context_provider_;
-}
-
-bool RendererGpuVideoAcceleratorFactories::IsGpuVideoAcceleratorEnabled() {
-  return video_accelerator_enabled_;
-}
-
-base::UnguessableToken RendererGpuVideoAcceleratorFactories::GetChannelToken() {
-  DCHECK(task_runner_->BelongsToCurrentThread());
-  if (CheckContextLost())
-    return base::UnguessableToken();
-
-  if (channel_token_.is_empty()) {
-    context_provider_->GetCommandBufferProxy()->channel()->Send(
-        new GpuCommandBufferMsg_GetChannelToken(&channel_token_));
-  }
-
-  return channel_token_;
-}
-
-int32_t RendererGpuVideoAcceleratorFactories::GetCommandBufferRouteId() {
-  DCHECK(task_runner_->BelongsToCurrentThread());
-  if (CheckContextLost())
-    return 0;
-  return context_provider_->GetCommandBufferProxy()->route_id();
-}
-
-std::unique_ptr<media::VideoDecodeAccelerator>
-RendererGpuVideoAcceleratorFactories::CreateVideoDecodeAccelerator() {
-  DCHECK(video_accelerator_enabled_);
-  DCHECK(task_runner_->BelongsToCurrentThread());
-  if (CheckContextLost())
-    return nullptr;
-
-  return std::unique_ptr<media::VideoDecodeAccelerator>(
-      new media::GpuVideoDecodeAcceleratorHost(
-          context_provider_->GetCommandBufferProxy()));
-}
-
-std::unique_ptr<media::VideoEncodeAccelerator>
-RendererGpuVideoAcceleratorFactories::CreateVideoEncodeAccelerator() {
-  DCHECK(video_accelerator_enabled_);
-  DCHECK(task_runner_->BelongsToCurrentThread());
-  if (CheckContextLost())
-    return nullptr;
-
-  return std::unique_ptr<media::VideoEncodeAccelerator>(
-      new media::GpuVideoEncodeAcceleratorHost(
-          context_provider_->GetCommandBufferProxy()));
-}
-
-bool RendererGpuVideoAcceleratorFactories::CreateTextures(
-    int32_t count,
-    const gfx::Size& size,
-    std::vector<uint32_t>* texture_ids,
-    std::vector<gpu::Mailbox>* texture_mailboxes,
-    uint32_t texture_target) {
-  DCHECK(task_runner_->BelongsToCurrentThread());
-  DCHECK(texture_target);
-
-  if (CheckContextLost())
-    return false;
-  cc::ContextProvider::ScopedContextLock lock(context_provider_);
-  gpu::gles2::GLES2Interface* gles2 = lock.ContextGL();
-  texture_ids->resize(count);
-  texture_mailboxes->resize(count);
-  gles2->GenTextures(count, &texture_ids->at(0));
-  for (int i = 0; i < count; ++i) {
-    gles2->ActiveTexture(GL_TEXTURE0);
-    uint32_t texture_id = texture_ids->at(i);
-    gles2->BindTexture(texture_target, texture_id);
-    gles2->TexParameteri(texture_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-    gles2->TexParameteri(texture_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-    gles2->TexParameteri(texture_target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-    gles2->TexParameteri(texture_target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-    if (texture_target == GL_TEXTURE_2D) {
-      gles2->TexImage2D(texture_target,
-                        0,
-                        GL_RGBA,
-                        size.width(),
-                        size.height(),
-                        0,
-                        GL_RGBA,
-                        GL_UNSIGNED_BYTE,
-                        NULL);
-    }
-    gles2->GenMailboxCHROMIUM(texture_mailboxes->at(i).name);
-    gles2->ProduceTextureCHROMIUM(texture_target,
-                                  texture_mailboxes->at(i).name);
-  }
-
-  // We need ShallowFlushCHROMIUM() here to order the command buffer commands
-  // with respect to IPC to the GPU process, to guarantee that the decoder in
-  // the GPU process can use these textures as soon as it receives IPC
-  // notification of them.
-  gles2->ShallowFlushCHROMIUM();
-  DCHECK_EQ(gles2->GetError(), static_cast<GLenum>(GL_NO_ERROR));
-  return true;
-}
-
-void RendererGpuVideoAcceleratorFactories::DeleteTexture(uint32_t texture_id) {
-  DCHECK(task_runner_->BelongsToCurrentThread());
-  if (CheckContextLost())
-    return;
-
-  cc::ContextProvider::ScopedContextLock lock(context_provider_);
-  gpu::gles2::GLES2Interface* gles2 = lock.ContextGL();
-  gles2->DeleteTextures(1, &texture_id);
-  DCHECK_EQ(gles2->GetError(), static_cast<GLenum>(GL_NO_ERROR));
-}
-
-gpu::SyncToken RendererGpuVideoAcceleratorFactories::CreateSyncToken() {
-  cc::ContextProvider::ScopedContextLock lock(context_provider_);
-  gpu::gles2::GLES2Interface* gl = lock.ContextGL();
-  gpu::SyncToken sync_token;
-  const GLuint64 fence_sync = gl->InsertFenceSyncCHROMIUM();
-  gl->ShallowFlushCHROMIUM();
-  gl->GenSyncTokenCHROMIUM(fence_sync, sync_token.GetData());
-  return sync_token;
-}
-
-void RendererGpuVideoAcceleratorFactories::WaitSyncToken(
-    const gpu::SyncToken& sync_token) {
-  DCHECK(task_runner_->BelongsToCurrentThread());
-  if (CheckContextLost())
-    return;
-
-  cc::ContextProvider::ScopedContextLock lock(context_provider_);
-  gpu::gles2::GLES2Interface* gles2 = lock.ContextGL();
-  gles2->WaitSyncTokenCHROMIUM(sync_token.GetConstData());
-
-  // Callers expect the WaitSyncToken to affect the next IPCs. Make sure to
-  // flush the command buffers to ensure that.
-  gles2->ShallowFlushCHROMIUM();
-}
-
-void RendererGpuVideoAcceleratorFactories::ShallowFlushCHROMIUM() {
-  DCHECK(task_runner_->BelongsToCurrentThread());
-  if (CheckContextLost())
-    return;
-
-  cc::ContextProvider::ScopedContextLock lock(context_provider_);
-  gpu::gles2::GLES2Interface* gles2 = lock.ContextGL();
-  gles2->ShallowFlushCHROMIUM();
-}
-
-std::unique_ptr<gfx::GpuMemoryBuffer>
-RendererGpuVideoAcceleratorFactories::CreateGpuMemoryBuffer(
-    const gfx::Size& size,
-    gfx::BufferFormat format,
-    gfx::BufferUsage usage) {
-  std::unique_ptr<gfx::GpuMemoryBuffer> buffer =
-      gpu_memory_buffer_manager_->CreateGpuMemoryBuffer(
-          size, format, usage, gpu::kNullSurfaceHandle);
-  return buffer;
-}
-bool RendererGpuVideoAcceleratorFactories::
-    ShouldUseGpuMemoryBuffersForVideoFrames() const {
-  return enable_gpu_memory_buffer_video_frames_;
-}
-
-unsigned RendererGpuVideoAcceleratorFactories::ImageTextureTarget(
-    gfx::BufferFormat format) {
-  auto found = image_texture_targets_.find(cc::BufferToTextureTargetKey(
-      gfx::BufferUsage::GPU_READ_CPU_READ_WRITE, format));
-  DCHECK(found != image_texture_targets_.end());
-  return found->second;
-}
-
-media::GpuVideoAcceleratorFactories::OutputFormat
-RendererGpuVideoAcceleratorFactories::VideoFrameOutputFormat() {
-  DCHECK(task_runner_->BelongsToCurrentThread());
-  if (CheckContextLost())
-    return media::GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED;
-  cc::ContextProvider::ScopedContextLock lock(context_provider_);
-  auto capabilities = context_provider_->ContextCapabilities();
-  if (capabilities.image_ycbcr_420v)
-    return media::GpuVideoAcceleratorFactories::OutputFormat::NV12_SINGLE_GMB;
-  if (capabilities.image_ycbcr_422)
-    return media::GpuVideoAcceleratorFactories::OutputFormat::UYVY;
-  if (capabilities.texture_rg)
-    return media::GpuVideoAcceleratorFactories::OutputFormat::NV12_DUAL_GMB;
-  return media::GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED;
-}
-
-namespace {
-class ScopedGLContextLockImpl
-    : public media::GpuVideoAcceleratorFactories::ScopedGLContextLock {
- public:
-  ScopedGLContextLockImpl(cc::ContextProvider* context_provider)
-      : lock_(context_provider) {}
-  gpu::gles2::GLES2Interface* ContextGL() override { return lock_.ContextGL(); }
-
- private:
-  cc::ContextProvider::ScopedContextLock lock_;
-};
-}  // namespace
-
-std::unique_ptr<media::GpuVideoAcceleratorFactories::ScopedGLContextLock>
-RendererGpuVideoAcceleratorFactories::GetGLContextLock() {
-  if (CheckContextLost())
-    return nullptr;
-  return base::MakeUnique<ScopedGLContextLockImpl>(context_provider_);
-}
-
-std::unique_ptr<base::SharedMemory>
-RendererGpuVideoAcceleratorFactories::CreateSharedMemory(size_t size) {
-  std::unique_ptr<base::SharedMemory> mem(
-      ChildThreadImpl::AllocateSharedMemory(size));
-  if (mem && !mem->Map(size))
-    return nullptr;
-  return mem;
-}
-
-scoped_refptr<base::SingleThreadTaskRunner>
-RendererGpuVideoAcceleratorFactories::GetTaskRunner() {
-  return task_runner_;
-}
-
-media::VideoDecodeAccelerator::Capabilities
-RendererGpuVideoAcceleratorFactories::GetVideoDecodeAcceleratorCapabilities() {
-  return media::GpuVideoAcceleratorUtil::ConvertGpuToMediaDecodeCapabilities(
-      gpu_channel_host_->gpu_info().video_decode_accelerator_capabilities);
-}
-
-media::VideoEncodeAccelerator::SupportedProfiles
-RendererGpuVideoAcceleratorFactories::
-    GetVideoEncodeAcceleratorSupportedProfiles() {
-  return media::GpuVideoAcceleratorUtil::ConvertGpuToMediaEncodeProfiles(
-      gpu_channel_host_->gpu_info()
-          .video_encode_accelerator_supported_profiles);
-}
-
-void RendererGpuVideoAcceleratorFactories::ReleaseContextProvider() {
-  DCHECK(main_thread_task_runner_->BelongsToCurrentThread());
-  RecordContextProviderPhaseUmaEnum(
-      ContextProviderPhase::CONTEXT_PROVIDER_RELEASED);
-  context_provider_refptr_ = nullptr;
-}
-
-scoped_refptr<ui::ContextProviderCommandBuffer>
-RendererGpuVideoAcceleratorFactories::ContextProviderMainThread() {
-  DCHECK(main_thread_task_runner_->BelongsToCurrentThread());
-  return context_provider_refptr_;
-}
-
-}  // namespace content
diff --git a/content/renderer/media/renderer_gpu_video_accelerator_factories.h b/content/renderer/media/renderer_gpu_video_accelerator_factories.h
deleted file mode 100644
index ba1d212..0000000
--- a/content/renderer/media/renderer_gpu_video_accelerator_factories.h
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_RENDERER_MEDIA_RENDERER_GPU_VIDEO_ACCELERATOR_FACTORIES_H_
-#define CONTENT_RENDERER_MEDIA_RENDERER_GPU_VIDEO_ACCELERATOR_FACTORIES_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <memory>
-#include <vector>
-
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/weak_ptr.h"
-#include "base/single_thread_task_runner.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/unguessable_token.h"
-#include "cc/output/buffer_to_texture_target_map.h"
-#include "content/child/thread_safe_sender.h"
-#include "content/common/content_export.h"
-#include "media/renderers/gpu_video_accelerator_factories.h"
-#include "ui/gfx/geometry/size.h"
-
-namespace gpu {
-class GpuChannelHost;
-class GpuMemoryBufferManager;
-}
-
-namespace ui {
-class ContextProviderCommandBuffer;
-}
-
-namespace content {
-
-// Glue code to expose functionality needed by media::GpuVideoAccelerator to
-// RenderViewImpl.  This class is entirely an implementation detail of
-// RenderViewImpl and only has its own header to allow extraction of its
-// implementation from render_view_impl.cc which is already far too large.
-//
-// The RendererGpuVideoAcceleratorFactories can be constructed on any thread,
-// but subsequent calls to all public methods of the class must be called from
-// the |task_runner_|, as provided during construction.
-class CONTENT_EXPORT RendererGpuVideoAcceleratorFactories
-    : public media::GpuVideoAcceleratorFactories {
- public:
-  // Takes a ref on |gpu_channel_host| and tests |context| for loss before each
-  // use.  Safe to call from any thread.
-  static std::unique_ptr<RendererGpuVideoAcceleratorFactories> Create(
-      scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
-      const scoped_refptr<base::SingleThreadTaskRunner>&
-          main_thread_task_runner,
-      const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-      const scoped_refptr<ui::ContextProviderCommandBuffer>& context_provider,
-      bool enable_gpu_memory_buffer_video_frames,
-      const cc::BufferToTextureTargetMap& image_texture_targets,
-      bool enable_video_accelerator);
-
-  // media::GpuVideoAcceleratorFactories implementation.
-  bool IsGpuVideoAcceleratorEnabled() override;
-  base::UnguessableToken GetChannelToken() override;
-  int32_t GetCommandBufferRouteId() override;
-  std::unique_ptr<media::VideoDecodeAccelerator> CreateVideoDecodeAccelerator()
-      override;
-  std::unique_ptr<media::VideoEncodeAccelerator> CreateVideoEncodeAccelerator()
-      override;
-  // Creates textures and produces them into mailboxes. Returns true on success
-  // or false on failure.
-  bool CreateTextures(int32_t count,
-                      const gfx::Size& size,
-                      std::vector<uint32_t>* texture_ids,
-                      std::vector<gpu::Mailbox>* texture_mailboxes,
-                      uint32_t texture_target) override;
-  void DeleteTexture(uint32_t texture_id) override;
-  gpu::SyncToken CreateSyncToken() override;
-  void WaitSyncToken(const gpu::SyncToken& sync_token) override;
-  void ShallowFlushCHROMIUM() override;
-
-  std::unique_ptr<gfx::GpuMemoryBuffer> CreateGpuMemoryBuffer(
-      const gfx::Size& size,
-      gfx::BufferFormat format,
-      gfx::BufferUsage usage) override;
-
-  bool ShouldUseGpuMemoryBuffersForVideoFrames() const override;
-  unsigned ImageTextureTarget(gfx::BufferFormat format) override;
-  OutputFormat VideoFrameOutputFormat() override;
-  std::unique_ptr<media::GpuVideoAcceleratorFactories::ScopedGLContextLock>
-  GetGLContextLock() override;
-  bool CheckContextLost();
-  std::unique_ptr<base::SharedMemory> CreateSharedMemory(size_t size) override;
-  scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() override;
-
-  media::VideoDecodeAccelerator::Capabilities
-  GetVideoDecodeAcceleratorCapabilities() override;
-  std::vector<media::VideoEncodeAccelerator::SupportedProfile>
-      GetVideoEncodeAcceleratorSupportedProfiles() override;
-
-  void ReleaseContextProvider();
-  scoped_refptr<ui::ContextProviderCommandBuffer> ContextProviderMainThread();
-
-  ~RendererGpuVideoAcceleratorFactories() override;
-
- private:
-  RendererGpuVideoAcceleratorFactories(
-      scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
-      const scoped_refptr<base::SingleThreadTaskRunner>&
-          main_thread_task_runner,
-      const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
-      const scoped_refptr<ui::ContextProviderCommandBuffer>& context_provider,
-      bool enable_gpu_memory_buffer_video_frames,
-      const cc::BufferToTextureTargetMap& image_texture_targets,
-      bool enable_video_accelerator);
-
-  scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
-  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
-  scoped_refptr<gpu::GpuChannelHost> gpu_channel_host_;
-
-  // Shared pointer to a shared context provider that should be accessed
-  // and set only on the main thread.
-  scoped_refptr<ui::ContextProviderCommandBuffer> context_provider_refptr_;
-
-  // Raw pointer to a context provider accessed from the media thread.
-  ui::ContextProviderCommandBuffer* context_provider_;
-
-  base::UnguessableToken channel_token_;
-
-  // Whether gpu memory buffers should be used to hold video frames data.
-  bool enable_gpu_memory_buffer_video_frames_;
-  const cc::BufferToTextureTargetMap image_texture_targets_;
-  // Whether video acceleration encoding/decoding should be enabled.
-  const bool video_accelerator_enabled_;
-
-  gpu::GpuMemoryBufferManager* const gpu_memory_buffer_manager_;
-
-  // For sending requests to allocate shared memory in the Browser process.
-  scoped_refptr<ThreadSafeSender> thread_safe_sender_;
-
-  DISALLOW_COPY_AND_ASSIGN(RendererGpuVideoAcceleratorFactories);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_RENDERER_MEDIA_RENDERER_GPU_VIDEO_ACCELERATOR_FACTORIES_H_
diff --git a/content/renderer/media_recorder/vea_encoder.cc b/content/renderer/media_recorder/vea_encoder.cc
index ae0c9b0..77ccb9e7 100644
--- a/content/renderer/media_recorder/vea_encoder.cc
+++ b/content/renderer/media_recorder/vea_encoder.cc
@@ -6,7 +6,7 @@
 
 #include <string>
 
-#include "content/renderer/media/renderer_gpu_video_accelerator_factories.h"
+#include "content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h"
 #include "content/renderer/render_thread_impl.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/video_frame.h"
diff --git a/content/renderer/media_recorder/video_track_recorder.cc b/content/renderer/media_recorder/video_track_recorder.cc
index d128bd7c..42bb19c 100644
--- a/content/renderer/media_recorder/video_track_recorder.cc
+++ b/content/renderer/media_recorder/video_track_recorder.cc
@@ -15,7 +15,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "cc/paint/skia_paint_canvas.h"
-#include "content/renderer/media/renderer_gpu_video_accelerator_factories.h"
+#include "content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h"
 #include "content/renderer/media_recorder/vea_encoder.h"
 #include "content/renderer/media_recorder/vpx_encoder.h"
 #include "content/renderer/render_thread_impl.h"
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index b5ab78a924..8bd2dbd 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1609,6 +1609,9 @@
                         OnMoveRangeSelectionExtent)
     IPC_MESSAGE_HANDLER(InputMsg_Replace, OnReplace)
     IPC_MESSAGE_HANDLER(InputMsg_ReplaceMisspelling, OnReplaceMisspelling)
+    IPC_MESSAGE_HANDLER(InputMsg_MoveCaret, OnMoveCaret)
+    IPC_MESSAGE_HANDLER(InputMsg_ScrollFocusedEditableNodeIntoRect,
+                        OnScrollFocusedEditableNodeIntoRect)
     IPC_MESSAGE_HANDLER(FrameMsg_CopyImageAt, OnCopyImageAt)
     IPC_MESSAGE_HANDLER(FrameMsg_SaveImageAt, OnSaveImageAt)
     IPC_MESSAGE_HANDLER(InputMsg_ExtendSelectionAndDelete,
@@ -1900,6 +1903,18 @@
   }
 }
 
+void RenderFrameImpl::OnMoveCaret(const gfx::Point& point) {
+  Send(new InputHostMsg_MoveCaret_ACK(render_view_->GetRoutingID()));
+  frame_->MoveCaretSelection(render_view_->ConvertWindowPointToViewport(point));
+}
+
+void RenderFrameImpl::OnScrollFocusedEditableNodeIntoRect(
+    const gfx::Rect& rect) {
+  // TODO(dtapuska): Move the implementation of scroll focused
+  // editable node into rect into this class.
+  render_view_->ScrollFocusedEditableNodeIntoRect(rect);
+}
+
 void RenderFrameImpl::OnUndo() {
   frame_->ExecuteCommand(WebString::FromUTF8("Undo"));
 }
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 7683fb5..6db17694 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -858,6 +858,8 @@
   void OnContextMenuClosed(const CustomContextMenuContext& custom_context);
   void OnCustomContextMenuAction(const CustomContextMenuContext& custom_context,
                                  unsigned action);
+  void OnMoveCaret(const gfx::Point& point);
+  void OnScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect);
   void OnUndo();
   void OnRedo();
   void OnCut();
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 6ae346c..97d5731f 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -115,10 +115,10 @@
 #include "content/renderer/media/audio_input_message_filter.h"
 #include "content/renderer/media/audio_message_filter.h"
 #include "content/renderer/media/audio_renderer_mixer_manager.h"
+#include "content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h"
 #include "content/renderer/media/media_stream_center.h"
 #include "content/renderer/media/midi_message_filter.h"
 #include "content/renderer/media/render_media_client.h"
-#include "content/renderer/media/renderer_gpu_video_accelerator_factories.h"
 #include "content/renderer/media/video_capture_impl_manager.h"
 #include "content/renderer/net_info_helper.h"
 #include "content/renderer/p2p/socket_dispatcher.h"
@@ -1421,10 +1421,9 @@
             GetMediaThreadTaskRunner();
         media_task_runner->PostTask(
             FROM_HERE,
-            base::Bind(
-                base::IgnoreResult(
-                    &RendererGpuVideoAcceleratorFactories::CheckContextLost),
-                base::Unretained(gpu_factories_.back().get())));
+            base::Bind(base::IgnoreResult(
+                           &GpuVideoAcceleratorFactoriesImpl::CheckContextLost),
+                       base::Unretained(gpu_factories_.back().get())));
       }
     }
   }
@@ -1465,7 +1464,7 @@
       cmd_line->HasSwitch(switches::kEnableGpuMemoryBufferVideoFrames);
 #endif
 
-  gpu_factories_.push_back(RendererGpuVideoAcceleratorFactories::Create(
+  gpu_factories_.push_back(GpuVideoAcceleratorFactoriesImpl::Create(
       std::move(gpu_channel_host), base::ThreadTaskRunnerHandle::Get(),
       media_task_runner, std::move(media_context_provider),
       enable_gpu_memory_buffer_video_frames, buffer_to_texture_target_map_,
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index e653a59..032c899 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -143,7 +143,7 @@
 class CategorizedWorkerPool;
 class RenderThreadObserver;
 class RendererBlinkPlatformImpl;
-class RendererGpuVideoAcceleratorFactories;
+class GpuVideoAcceleratorFactoriesImpl;
 class ResourceDispatchThrottler;
 class VideoCaptureImplManager;
 
@@ -698,8 +698,7 @@
   // TODO(dcastagna): This should be just one scoped_ptr once
   // http://crbug.com/580386 is fixed.
   // NOTE(dcastagna): At worst this accumulates a few bytes per context lost.
-  std::vector<std::unique_ptr<RendererGpuVideoAcceleratorFactories>>
-      gpu_factories_;
+  std::vector<std::unique_ptr<GpuVideoAcceleratorFactoriesImpl>> gpu_factories_;
 
   // Thread for running multimedia operations (e.g., video decoding).
   std::unique_ptr<base::Thread> media_thread_;
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index d0f55d4..bc40880 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -1149,10 +1149,6 @@
 
   bool handled = true;
   IPC_BEGIN_MESSAGE_MAP(RenderViewImpl, message)
-    IPC_MESSAGE_HANDLER(InputMsg_ExecuteEditCommand, OnExecuteEditCommand)
-    IPC_MESSAGE_HANDLER(InputMsg_MoveCaret, OnMoveCaret)
-    IPC_MESSAGE_HANDLER(InputMsg_ScrollFocusedEditableNodeIntoRect,
-                        OnScrollFocusedEditableNodeIntoRect)
     IPC_MESSAGE_HANDLER(ViewMsg_SetPageScale, OnSetPageScale)
     IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus)
     IPC_MESSAGE_HANDLER(ViewMsg_UpdateTargetURL_ACK, OnUpdateTargetURLAck)
@@ -1243,26 +1239,7 @@
   target_url_status_ = TARGET_NONE;
 }
 
-void RenderViewImpl::OnExecuteEditCommand(const std::string& name,
-    const std::string& value) {
-  if (!webview() || !webview()->FocusedFrame())
-    return;
-
-  webview()->FocusedFrame()->ExecuteCommand(WebString::FromUTF8(name),
-                                            WebString::FromUTF8(value));
-}
-
-void RenderViewImpl::OnMoveCaret(const gfx::Point& point) {
-  if (!webview())
-    return;
-
-  Send(new InputHostMsg_MoveCaret_ACK(GetRoutingID()));
-  webview()->FocusedFrame()->MoveCaretSelection(
-      ConvertWindowPointToViewport(point));
-}
-
-void RenderViewImpl::OnScrollFocusedEditableNodeIntoRect(
-    const gfx::Rect& rect) {
+void RenderViewImpl::ScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect) {
   blink::WebAutofillClient* autofill_client = nullptr;
   if (auto* focused_frame = GetWebView()->FocusedFrame())
     autofill_client = focused_frame->AutofillClient();
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index 452aa15..ded94ab 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -381,6 +381,7 @@
   void HandleInputEvent(const blink::WebCoalescedInputEvent& input_event,
                         const ui::LatencyInfo& latency_info,
                         HandledEventCallback callback) override;
+  void ScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect);
 
  protected:
   // RenderWidget overrides:
@@ -505,8 +506,6 @@
   // The documentation for these functions should be in
   // content/common/*_messages.h for the message that the function is handling.
   void OnExecuteEditCommand(const std::string& name, const std::string& value);
-  void OnMoveCaret(const gfx::Point& point);
-  void OnScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect);
   void OnAllowScriptToClose(bool script_can_close);
   void OnCancelDownload(int32_t download_id);
   void OnClosePage();
diff --git a/content/renderer/renderer_v2.sb b/content/renderer/renderer_v2.sb
index cb871b0..341bbf3 100644
--- a/content/renderer/renderer_v2.sb
+++ b/content/renderer/renderer_v2.sb
@@ -16,6 +16,7 @@
 (define enable-logging "ENABLE_LOGGING")
 (define homedir-as-literal "USER_HOMEDIR_AS_LITERAL")
 (define elcap-or-later "ELCAP_OR_LATER")
+(define is-mavericks "IS_MAVERICKS")
 (define bundle-path "BUNDLE_PATH")
 (define executable-path "EXECUTABLE_PATH")
 (define chromium-pid "CHROMIUM_PID")
@@ -25,6 +26,7 @@
 
 ; Backwards compatibility for 10.9
 (define (path x) (literal x))
+(define (iokit-registry-entry-class x) (iokit-user-client-class x))
 
 ; --enable-sandbox-logging causes the sandbox to log failures to the syslog.
 (if (param-true? disable-sandbox-denial-logging)
@@ -47,7 +49,7 @@
 (if (param-defined? component-path)
   (allow file-read* (subpath (param component-path))))
 
-(allow process-exec* (path (param executable-path)))
+(allow process-exec (path (param executable-path)))
 (allow file-read* (path (param executable-path)))
 
 (allow mach-lookup (global-name (string-append (param bundle-id)
@@ -122,23 +124,30 @@
   (global-name "com.apple.system.opendirectoryd.libinfo")
   (global-name "com.apple.windowserver.active"))
 
+; MacOS dropped FontServer to replace it with the (XPC based) com.apple.fonts.
+(if (param-true? is-mavericks)
+  (allow mach-lookup (global-name "com.apple.FontServer")))
+
 ; sysctl
-(allow sysctl-read
-  (sysctl-name "hw.activecpu")
-  (sysctl-name "hw.busfrequency_compat")
-  (sysctl-name "hw.byteorder")
-  (sysctl-name "hw.cachelinesize_compat")
-  (sysctl-name "hw.cpufrequency_compat")
-  (sysctl-name "hw.cputype")
-  (sysctl-name "hw.machine")
-  (sysctl-name "hw.ncpu")
-  (sysctl-name "hw.pagesize_compat")
-  (sysctl-name "hw.physicalcpu_max")
-  (sysctl-name "hw.tbfrequency_compat")
-  (sysctl-name "hw.vectorunit")
-  (sysctl-name "kern.hostname")
-  (sysctl-name "kern.maxfilesperproc")
-  (sysctl-name "kern.osrelease")
-  (sysctl-name "kern.ostype")
-  (sysctl-name "kern.osversion")
-  (sysctl-name "kern.version"))
+(if (param-true? is-mavericks)
+  (allow sysctl-read)
+  ; else
+  (allow sysctl-read
+    (sysctl-name "hw.activecpu")
+    (sysctl-name "hw.busfrequency_compat")
+    (sysctl-name "hw.byteorder")
+    (sysctl-name "hw.cachelinesize_compat")
+    (sysctl-name "hw.cpufrequency_compat")
+    (sysctl-name "hw.cputype")
+    (sysctl-name "hw.machine")
+    (sysctl-name "hw.ncpu")
+    (sysctl-name "hw.pagesize_compat")
+    (sysctl-name "hw.physicalcpu_max")
+    (sysctl-name "hw.tbfrequency_compat")
+    (sysctl-name "hw.vectorunit")
+    (sysctl-name "kern.hostname")
+    (sysctl-name "kern.maxfilesperproc")
+    (sysctl-name "kern.osrelease")
+    (sysctl-name "kern.ostype")
+    (sysctl-name "kern.osversion")
+    (sysctl-name "kern.version")))
diff --git a/content/shell/BUILD.gn b/content/shell/BUILD.gn
index e161d9c..4703e710 100644
--- a/content/shell/BUILD.gn
+++ b/content/shell/BUILD.gn
@@ -170,6 +170,8 @@
     "common/shell_origin_trial_policy.h",
     "common/shell_switches.cc",
     "common/shell_switches.h",
+    "gpu/shell_content_gpu_client.cc",
+    "gpu/shell_content_gpu_client.h",
     "renderer/layout_test/blink_test_helpers.cc",
     "renderer/layout_test/blink_test_helpers.h",
     "renderer/layout_test/blink_test_runner.cc",
@@ -210,6 +212,7 @@
     "//content/public/browser",
     "//content/public/child",
     "//content/public/common",
+    "//content/public/gpu",
     "//content/public/renderer",
     "//content/public/utility",
     "//ipc",
diff --git a/content/shell/app/shell_main_delegate.cc b/content/shell/app/shell_main_delegate.cc
index 5f25656..7dd9ff9 100644
--- a/content/shell/app/shell_main_delegate.cc
+++ b/content/shell/app/shell_main_delegate.cc
@@ -31,6 +31,7 @@
 #include "content/shell/common/layout_test/layout_test_switches.h"
 #include "content/shell/common/shell_content_client.h"
 #include "content/shell/common/shell_switches.h"
+#include "content/shell/gpu/shell_content_gpu_client.h"
 #include "content/shell/renderer/layout_test/layout_test_content_renderer_client.h"
 #include "content/shell/renderer/shell_content_renderer_client.h"
 #include "content/shell/utility/shell_content_utility_client.h"
@@ -377,6 +378,11 @@
   return browser_client_.get();
 }
 
+ContentGpuClient* ShellMainDelegate::CreateContentGpuClient() {
+  gpu_client_.reset(new ShellContentGpuClient);
+  return gpu_client_.get();
+}
+
 ContentRendererClient* ShellMainDelegate::CreateContentRendererClient() {
   renderer_client_.reset(base::CommandLine::ForCurrentProcess()->HasSwitch(
                              switches::kRunLayoutTest)
diff --git a/content/shell/app/shell_main_delegate.h b/content/shell/app/shell_main_delegate.h
index 1297ff8..689c1b7 100644
--- a/content/shell/app/shell_main_delegate.h
+++ b/content/shell/app/shell_main_delegate.h
@@ -15,6 +15,7 @@
 namespace content {
 class ContentClient;
 class ShellContentBrowserClient;
+class ShellContentGpuClient;
 class ShellContentRendererClient;
 class ShellContentUtilityClient;
 
@@ -36,6 +37,7 @@
   void ZygoteForked() override;
 #endif
   ContentBrowserClient* CreateContentBrowserClient() override;
+  ContentGpuClient* CreateContentGpuClient() override;
   ContentRendererClient* CreateContentRendererClient() override;
   ContentUtilityClient* CreateContentUtilityClient() override;
 
@@ -43,6 +45,7 @@
 
  private:
   std::unique_ptr<ShellContentBrowserClient> browser_client_;
+  std::unique_ptr<ShellContentGpuClient> gpu_client_;
   std::unique_ptr<ShellContentRendererClient> renderer_client_;
   std::unique_ptr<ShellContentUtilityClient> utility_client_;
   std::unique_ptr<ContentClient> content_client_;
diff --git a/content/shell/browser/OWNERS b/content/shell/browser/OWNERS
index 890d46a..c4dd179a 100644
--- a/content/shell/browser/OWNERS
+++ b/content/shell/browser/OWNERS
@@ -3,5 +3,7 @@
 
 per-file content_shell_browser_manifest_overlay.json=set noparent
 per-file content_shell_browser_manifest_overlay.json=file://ipc/SECURITY_OWNERS
+per-file content_shell_gpu_manifest_overlay.json=set noparent
+per-file content_shell_gpu_manifest_overlay.json=file://ipc/SECURITY_OWNERS
 per-file content_shell_utility_manifest_overlay.json=set noparent
 per-file content_shell_utility_manifest_overlay.json=file://ipc/SECURITY_OWNERS
diff --git a/content/shell/browser/content_shell_gpu_manifest_overlay.json b/content/shell/browser/content_shell_gpu_manifest_overlay.json
new file mode 100644
index 0000000..f032a68
--- /dev/null
+++ b/content/shell/browser/content_shell_gpu_manifest_overlay.json
@@ -0,0 +1,12 @@
+{
+  "name": "content_gpu",
+  "interface_provider_specs": {
+    "service_manager:connector": {
+      "provides": {
+        "browser": [
+          "content::mojom::PowerMonitorTest"
+        ]
+      }
+    }
+  }
+}
diff --git a/content/shell/browser/shell_content_browser_client.cc b/content/shell/browser/shell_content_browser_client.cc
index 21c02e6..f03cde3a 100644
--- a/content/shell/browser/shell_content_browser_client.cc
+++ b/content/shell/browser/shell_content_browser_client.cc
@@ -255,6 +255,8 @@
   int id = -1;
   if (name == content::mojom::kBrowserServiceName)
     id = IDR_CONTENT_SHELL_BROWSER_MANIFEST_OVERLAY;
+  else if (name == content::mojom::kGpuServiceName)
+    id = IDR_CONTENT_SHELL_GPU_MANIFEST_OVERLAY;
   else if (name == content::mojom::kRendererServiceName)
     id = IDR_CONTENT_SHELL_RENDERER_MANIFEST_OVERLAY;
   else if (name == content::mojom::kUtilityServiceName)
diff --git a/content/shell/gpu/DEPS b/content/shell/gpu/DEPS
new file mode 100644
index 0000000..c610d2e
--- /dev/null
+++ b/content/shell/gpu/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+services/service_manager",
+]
diff --git a/content/shell/gpu/shell_content_gpu_client.cc b/content/shell/gpu/shell_content_gpu_client.cc
new file mode 100644
index 0000000..21c1692
--- /dev/null
+++ b/content/shell/gpu/shell_content_gpu_client.cc
@@ -0,0 +1,27 @@
+// 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 "content/shell/gpu/shell_content_gpu_client.h"
+
+#include "base/memory/ptr_util.h"
+#include "content/shell/common/power_monitor_test_impl.h"
+#include "mojo/public/cpp/bindings/strong_binding.h"
+#include "services/service_manager/public/cpp/binder_registry.h"
+
+namespace content {
+
+ShellContentGpuClient::ShellContentGpuClient() = default;
+
+ShellContentGpuClient::~ShellContentGpuClient() = default;
+
+void ShellContentGpuClient::Initialize(
+    base::FieldTrialList::Observer* observer,
+    service_manager::BinderRegistry* registry) {
+  registry->AddInterface<mojom::PowerMonitorTest>(
+      base::Bind(&PowerMonitorTestImpl::MakeStrongBinding,
+                 base::Passed(base::MakeUnique<PowerMonitorTestImpl>())),
+      base::ThreadTaskRunnerHandle::Get());
+}
+
+}  // namespace content
diff --git a/content/shell/gpu/shell_content_gpu_client.h b/content/shell/gpu/shell_content_gpu_client.h
new file mode 100644
index 0000000..d9ebbc4
--- /dev/null
+++ b/content/shell/gpu/shell_content_gpu_client.h
@@ -0,0 +1,30 @@
+// 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 CONTENT_SHELL_GPU_SHELL_CONTENT_GPU_CLIENT_H_
+#define CONTENT_SHELL_GPU_SHELL_CONTENT_GPU_CLIENT_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "content/public/common/network_service_test.mojom.h"
+#include "content/public/gpu/content_gpu_client.h"
+
+namespace content {
+
+class ShellContentGpuClient : public ContentGpuClient {
+ public:
+  ShellContentGpuClient();
+  ~ShellContentGpuClient() override;
+
+  // ContentGpuClient:
+  void Initialize(base::FieldTrialList::Observer* observer,
+                  service_manager::BinderRegistry* registry) override;
+
+  DISALLOW_COPY_AND_ASSIGN(ShellContentGpuClient);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_SHELL_GPU_SHELL_CONTENT_GPU_CLIENT_H_
diff --git a/content/shell/shell_resources.grd b/content/shell/shell_resources.grd
index 19e5276..0fdafbe 100644
--- a/content/shell/shell_resources.grd
+++ b/content/shell/shell_resources.grd
@@ -13,6 +13,7 @@
       <include name="IDR_CONTENT_SHELL_MISSING_IMAGE_GIF" file="resources/missingImage.gif" type="BINDATA" />
       <include name="IDR_CONTENT_SHELL_MISSING_IMAGE_PNG" file="resources/missingImage.png" type="BINDATA" />
       <include name="IDR_CONTENT_SHELL_BROWSER_MANIFEST_OVERLAY" file="browser/content_shell_browser_manifest_overlay.json" type="BINDATA" />
+      <include name="IDR_CONTENT_SHELL_GPU_MANIFEST_OVERLAY" file="browser/content_shell_gpu_manifest_overlay.json" type="BINDATA" />
       <include name="IDR_CONTENT_SHELL_RENDERER_MANIFEST_OVERLAY" file="browser/content_shell_renderer_manifest_overlay.json" type="BINDATA" />
       <include name="IDR_CONTENT_SHELL_UTILITY_MANIFEST_OVERLAY" file="browser/content_shell_utility_manifest_overlay.json" type="BINDATA" />
     </includes>
diff --git a/content/test/data/accessibility/html/button-name-calc-expected-android.txt b/content/test/data/accessibility/html/button-name-calc-expected-android.txt
index c874303..704bf09 100644
--- a/content/test/data/accessibility/html/button-name-calc-expected-android.txt
+++ b/content/test/data/accessibility/html/button-name-calc-expected-android.txt
@@ -4,4 +4,7 @@
 ++android.widget.Button role_description='button' clickable focusable name='AriaLabel2 Title2'
 ++android.widget.Button role_description='button' clickable focusable name='LabelledBy3 Title3'
 ++android.widget.Button role_description='button' clickable focusable name='LabelledBy4 DescribedBy4'
-++android.widget.Button role_description='button' clickable focusable name='InnerText5 DescribedBy5'
\ No newline at end of file
+++android.widget.Button role_description='button' clickable focusable name='InnerText5 DescribedBy5'
+++android.widget.Button role_description='button' clickable focusable name='Outer inner'
+++android.widget.Button role_description='button' clickable focusable name='Outer inner1'
+++android.widget.Button role_description='button' clickable focusable name='Outer grandchild'
\ No newline at end of file
diff --git a/content/test/data/accessibility/html/button-name-calc-expected-blink.txt b/content/test/data/accessibility/html/button-name-calc-expected-blink.txt
index 3c4c8494..86fcf4b 100644
--- a/content/test/data/accessibility/html/button-name-calc-expected-blink.txt
+++ b/content/test/data/accessibility/html/button-name-calc-expected-blink.txt
@@ -5,3 +5,6 @@
 ++button description='Title3' name='LabelledBy3' descriptionFrom=2
 ++button description='DescribedBy4' name='LabelledBy4' descriptionFrom=5
 ++button description='DescribedBy5' name='InnerText5' descriptionFrom=5
+++button name='Outer inner'
+++button name='Outer inner1'
+++button name='Outer grandchild'
diff --git a/content/test/data/accessibility/html/button-name-calc-expected-mac.txt b/content/test/data/accessibility/html/button-name-calc-expected-mac.txt
index 19686dd6..38bee9d 100644
--- a/content/test/data/accessibility/html/button-name-calc-expected-mac.txt
+++ b/content/test/data/accessibility/html/button-name-calc-expected-mac.txt
@@ -5,3 +5,6 @@
 ++AXButton AXTitle='LabelledBy3' AXHelp='Title3'
 ++AXButton AXTitle='LabelledBy4' AXHelp='DescribedBy4'
 ++AXButton AXTitle='InnerText5' AXHelp='DescribedBy5'
+++AXButton AXTitle='Outer inner'
+++AXButton AXTitle='Outer inner1'
+++AXButton AXTitle='Outer grandchild'
diff --git a/content/test/data/accessibility/html/button-name-calc-expected-win.txt b/content/test/data/accessibility/html/button-name-calc-expected-win.txt
index 856df38b..d7cc83a7 100644
--- a/content/test/data/accessibility/html/button-name-calc-expected-win.txt
+++ b/content/test/data/accessibility/html/button-name-calc-expected-win.txt
@@ -5,3 +5,6 @@
 ++ROLE_SYSTEM_PUSHBUTTON name='LabelledBy3' FOCUSABLE explicit-name:true description='Title3'
 ++ROLE_SYSTEM_PUSHBUTTON name='LabelledBy4' FOCUSABLE explicit-name:true description='DescribedBy4'
 ++ROLE_SYSTEM_PUSHBUTTON name='InnerText5' FOCUSABLE description='DescribedBy5'
+++ROLE_SYSTEM_PUSHBUTTON name='Outer inner' FOCUSABLE
+++ROLE_SYSTEM_PUSHBUTTON name='Outer inner1' FOCUSABLE
+++ROLE_SYSTEM_PUSHBUTTON name='Outer grandchild' FOCUSABLE
diff --git a/content/test/data/accessibility/html/button-name-calc.html b/content/test/data/accessibility/html/button-name-calc.html
index cf97c791..7c783b9 100644
--- a/content/test/data/accessibility/html/button-name-calc.html
+++ b/content/test/data/accessibility/html/button-name-calc.html
@@ -15,7 +15,9 @@
   <button id="c4" title="Title4" aria-label="AriaLabel4"
          aria-labelledby="lb4" aria-describedby="db4">InnerText4</button>
   <button id="c5" aria-describedby="db5">InnerText5</button>
-
+  <button>Outer <div>inner</div></button>
+  <button>Outer <div aria-label="inner1">inner2</div></button>
+  <button>Outer <section><div>grandchild</div></section></button>
   <p aria-label="@NO_DUMP">
     <span id="lb3">LabelledBy3</span>
     <span id="lb4">LabelledBy4</span>
diff --git a/device/base/synchronization/one_writer_seqlock_unittest.cc b/device/base/synchronization/one_writer_seqlock_unittest.cc
index 28cd2b0..1e0209a 100644
--- a/device/base/synchronization/one_writer_seqlock_unittest.cc
+++ b/device/base/synchronization/one_writer_seqlock_unittest.cc
@@ -33,7 +33,7 @@
     ready_ = ready;
   }
   void ThreadMain() override {
-    while (base::AtomicRefCountIsZero(ready_)) {
+    while (ready_->IsZero()) {
       base::PlatformThread::YieldCurrentThread();
     }
 
@@ -49,7 +49,7 @@
       EXPECT_EQ(copy.c, copy.b + copy.a);
     }
 
-    base::AtomicRefCountDec(ready_);
+    ready_->Decrement();
   }
 
  private:
@@ -91,9 +91,9 @@
     seqlock.WriteEnd();
 
     if (counter == 1)
-      base::AtomicRefCountIncN(&ready, kNumReaderThreads);
+      ready.Increment(kNumReaderThreads);
 
-    if (base::AtomicRefCountIsZero(&ready))
+    if (ready.IsZero())
       break;
   }
 
diff --git a/device/vr/BUILD.gn b/device/vr/BUILD.gn
index 48eaf4ea..66c7655 100644
--- a/device/vr/BUILD.gn
+++ b/device/vr/BUILD.gn
@@ -128,7 +128,4 @@
     "//mojo/common:common_custom_types",
     "//ui/gfx/geometry/mojo",
   ]
-
-  # TODO(crbug.com/699569): Convert to use the new JS bindings.
-  use_new_js_bindings = false
 }
diff --git a/device/vr/vr_device.h b/device/vr/vr_device.h
index 9b75194c..b4bcb756 100644
--- a/device/vr/vr_device.h
+++ b/device/vr/vr_device.h
@@ -39,19 +39,19 @@
   virtual void GetNextMagicWindowPose(
       mojom::VRDisplay::GetNextMagicWindowPoseCallback callback) = 0;
 
-  virtual void AddDisplay(VRDisplayImpl* display);
-  virtual void RemoveDisplay(VRDisplayImpl* display);
+  void AddDisplay(VRDisplayImpl* display);
+  void RemoveDisplay(VRDisplayImpl* display);
 
-  virtual bool IsAccessAllowed(VRDisplayImpl* display);
-  virtual bool CheckPresentingDisplay(VRDisplayImpl* display);
+  bool IsAccessAllowed(VRDisplayImpl* display);
+  bool CheckPresentingDisplay(VRDisplayImpl* display);
 
-  virtual void OnChanged();
-  virtual void OnExitPresent();
-  virtual void OnBlur();
-  virtual void OnFocus();
-  virtual void OnActivate(mojom::VRDisplayEventReason reason,
-                          const base::Callback<void(bool)>& on_handled);
-  virtual void OnDeactivate(mojom::VRDisplayEventReason reason);
+  void OnChanged();
+  void OnExitPresent();
+  void OnBlur();
+  void OnFocus();
+  void OnActivate(mojom::VRDisplayEventReason reason,
+                  const base::Callback<void(bool)>& on_handled);
+  void OnDeactivate(mojom::VRDisplayEventReason reason);
 
  protected:
   friend class VRDisplayImpl;
diff --git a/device/vr/vr_device_manager.cc b/device/vr/vr_device_manager.cc
index af97c0a..7e6b5aa1 100644
--- a/device/vr/vr_device_manager.cc
+++ b/device/vr/vr_device_manager.cc
@@ -26,11 +26,7 @@
 VRDeviceManager* g_vr_device_manager = nullptr;
 }
 
-VRDeviceManager::VRDeviceManager()
-    : vr_initialized_(false),
-      keep_alive_(false),
-      has_scheduled_poll_(false),
-      has_activate_listeners_(false) {
+VRDeviceManager::VRDeviceManager() : keep_alive_(false) {
 // Register VRDeviceProviders for the current platform
 #if defined(OS_ANDROID)
   RegisterProvider(base::MakeUnique<GvrDeviceProvider>());
@@ -42,15 +38,15 @@
 }
 
 VRDeviceManager::VRDeviceManager(std::unique_ptr<VRDeviceProvider> provider)
-    : vr_initialized_(false), keep_alive_(true), has_scheduled_poll_(false) {
+    : keep_alive_(true) {
   thread_checker_.DetachFromThread();
   RegisterProvider(std::move(provider));
-  SetInstance(this);
+  CHECK(!g_vr_device_manager);
+  g_vr_device_manager = this;
 }
 
 VRDeviceManager::~VRDeviceManager() {
   DCHECK(thread_checker_.CalledOnValidThread());
-  StopSchedulingPollEvents();
   g_vr_device_manager = nullptr;
 }
 
@@ -60,19 +56,6 @@
   return g_vr_device_manager;
 }
 
-void VRDeviceManager::SetInstance(VRDeviceManager* instance) {
-  // Unit tests can create multiple instances but only one should exist at any
-  // given time so g_vr_device_manager should only go from nullptr to
-  // non-nullptr and vice versa.
-  CHECK_NE(!!instance, !!g_vr_device_manager);
-  g_vr_device_manager = instance;
-}
-
-bool VRDeviceManager::HasInstance() {
-  // For testing. Checks to see if a VRDeviceManager instance is active.
-  return !!g_vr_device_manager;
-}
-
 void VRDeviceManager::AddService(VRServiceImpl* service) {
   // Loop through any currently active devices and send Connected messages to
   // the service. Future devices that come online will send a Connected message
@@ -185,24 +168,4 @@
   providers_.push_back(std::move(provider));
 }
 
-void VRDeviceManager::SchedulePollEvents() {
-  if (has_scheduled_poll_)
-    return;
-
-  has_scheduled_poll_ = true;
-
-  timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(500), this,
-               &VRDeviceManager::PollEvents);
-}
-
-void VRDeviceManager::PollEvents() {
-  for (const auto& provider : providers_)
-    provider->PollEvents();
-}
-
-void VRDeviceManager::StopSchedulingPollEvents() {
-  if (has_scheduled_poll_)
-    timer_.Stop();
-}
-
 }  // namespace device
diff --git a/device/vr/vr_device_manager.h b/device/vr/vr_device_manager.h
index fa157504..fed2abc 100644
--- a/device/vr/vr_device_manager.h
+++ b/device/vr/vr_device_manager.h
@@ -59,16 +59,9 @@
 
   DEVICE_VR_EXPORT VRDevice* GetDevice(unsigned int index);
 
-  static void SetInstance(VRDeviceManager* service);
-  static bool HasInstance();
-
   void InitializeProviders();
   void RegisterProvider(std::unique_ptr<VRDeviceProvider> provider);
 
-  void SchedulePollEvents();
-  void PollEvents();
-  void StopSchedulingPollEvents();
-
   using ProviderList = std::vector<std::unique_ptr<VRDeviceProvider>>;
   ProviderList providers_;
 
@@ -76,7 +69,7 @@
   using DeviceMap = std::map<unsigned int, VRDevice*>;
   DeviceMap devices_;
 
-  bool vr_initialized_;
+  bool vr_initialized_ = false;
 
   std::set<VRServiceImpl*> services_;
   VRServiceImpl* most_recently_listening_for_activate_ = nullptr;
@@ -84,14 +77,10 @@
   // For testing. If true will not delete self when consumer count reaches 0.
   bool keep_alive_;
 
-  bool has_scheduled_poll_;
-
-  bool has_activate_listeners_;
+  bool has_activate_listeners_ = false;
 
   base::ThreadChecker thread_checker_;
 
-  base::RepeatingTimer timer_;
-
   DISALLOW_COPY_AND_ASSIGN(VRDeviceManager);
 };
 
diff --git a/device/vr/vr_device_manager_unittest.cc b/device/vr/vr_device_manager_unittest.cc
index f8d39f1..2e9024b8 100644
--- a/device/vr/vr_device_manager_unittest.cc
+++ b/device/vr/vr_device_manager_unittest.cc
@@ -34,8 +34,6 @@
 
   std::unique_ptr<VRServiceImpl> BindService();
 
-  bool HasServiceInstance() { return VRDeviceManager::HasInstance(); }
-
   VRDevice* GetDevice(unsigned int index) {
     return device_manager_->GetDevice(index);
   }
diff --git a/device/vr/vr_device_provider.h b/device/vr/vr_device_provider.h
index d356673..ad7983c2 100644
--- a/device/vr/vr_device_provider.h
+++ b/device/vr/vr_device_provider.h
@@ -21,8 +21,6 @@
   // If the VR API requires initialization that should happen here.
   virtual void Initialize() = 0;
 
-  virtual void PollEvents() {}
-
   virtual void SetListeningForActivate(bool listening) {}
 };
 
diff --git a/extensions/renderer/bindings/api_binding.cc b/extensions/renderer/bindings/api_binding.cc
index e69ecca..d5ee62f 100644
--- a/extensions/renderer/bindings/api_binding.cc
+++ b/extensions/renderer/bindings/api_binding.cc
@@ -30,6 +30,21 @@
 
 namespace {
 
+std::string GetPlatformString() {
+#if defined(OS_CHROMEOS)
+  return "chromeos";
+#elif defined(OS_LINUX)
+  return "linux";
+#elif defined(OS_MACOSX)
+  return "mac";
+#elif defined(OS_WIN)
+  return "win";
+#else
+  NOTREACHED();
+  return std::string();
+#endif
+}
+
 // Returns the name of the enum value for use in JavaScript; JS enum entries use
 // SCREAMING_STYLE.
 std::string GetJSEnumEntryName(const std::string& original) {
@@ -428,6 +443,23 @@
       continue;
     }
 
+    const base::ListValue* platforms = nullptr;
+    // TODO(devlin): This isn't great. It's bad to have availability primarily
+    // defined in the features files, and then partially defined within the
+    // API specification itself. Additionally, they aren't equivalent
+    // definitions. But given the rarity of property restrictions, and the fact
+    // that they are all limited by platform, it makes more sense to isolate
+    // this check here. If this becomes more common, we should really find a
+    // way of moving these checks to the features files.
+    if (dict->GetList("platforms", &platforms)) {
+      std::string this_platform = GetPlatformString();
+      auto is_this_platform = [&this_platform](const base::Value& platform) {
+        return platform.is_string() && platform.GetString() == this_platform;
+      };
+      if (std::none_of(platforms->begin(), platforms->end(), is_this_platform))
+        continue;
+    }
+
     v8::Local<v8::String> v8_key = gin::StringToSymbol(isolate, iter.key());
     std::string ref;
     if (dict->GetString("$ref", &ref)) {
diff --git a/extensions/renderer/bindings/api_binding_unittest.cc b/extensions/renderer/bindings/api_binding_unittest.cc
index 9f43d1a..73e1ab3 100644
--- a/extensions/renderer/bindings/api_binding_unittest.cc
+++ b/extensions/renderer/bindings/api_binding_unittest.cc
@@ -606,6 +606,16 @@
       "      'subprop1': { 'value': 'some value', 'type': 'string' },"
       "      'subprop2': { 'value': true, 'type': 'boolean' }"
       "    }"
+      "  },"
+      "  'linuxOnly': {"
+      "    'value': 'linux',"
+      "    'type': 'string',"
+      "    'platforms': ['linux']"
+      "  },"
+      "  'nonLinuxOnly': {"
+      "    'value': 'nonlinux',"
+      "    'type': 'string',"
+      "    'platforms': ['win', 'mac', 'chromeos']"
       "  }"
       "}");
   InitializeBinding();
@@ -617,6 +627,18 @@
             GetStringPropertyFromObject(binding_object, context, "prop1"));
   EXPECT_EQ(R"({"subprop1":"some value","subprop2":true})",
             GetStringPropertyFromObject(binding_object, context, "prop2"));
+
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+  EXPECT_EQ("\"linux\"",
+            GetStringPropertyFromObject(binding_object, context, "linuxOnly"));
+  EXPECT_EQ("undefined", GetStringPropertyFromObject(binding_object, context,
+                                                     "nonLinuxOnly"));
+#else
+  EXPECT_EQ("undefined",
+            GetStringPropertyFromObject(binding_object, context, "linuxOnly"));
+  EXPECT_EQ("\"nonlinux\"", GetStringPropertyFromObject(binding_object, context,
+                                                        "nonLinuxOnly"));
+#endif
 }
 
 TEST_F(APIBindingUnittest, TestRefProperties) {
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.cc b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.cc
index 7fce205..fe5015d2 100644
--- a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.cc
+++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.cc
@@ -148,7 +148,7 @@
   if (!render_frame() || !is_embedded_)
     return;
 
-  blink::WebFrame* frame = render_frame()->GetWebFrame();
+  blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
 
   blink::WebAssociatedURLLoaderOptions options;
   DCHECK(!loader_);
diff --git a/gpu/ipc/common/BUILD.gn b/gpu/ipc/common/BUILD.gn
index b7250e9..4ce7bddf 100644
--- a/gpu/ipc/common/BUILD.gn
+++ b/gpu/ipc/common/BUILD.gn
@@ -151,9 +151,6 @@
     "//mojo/common:common_custom_types",
     "//ui/gfx/geometry/mojo",
   ]
-
-  # TODO(crbug.com/699569): Convert to use the new JS bindings.
-  use_new_js_bindings = false
 }
 
 mojom("test_interfaces") {
diff --git a/ios/chrome/app/resources/XCTRunnerAddition+Info.plist b/ios/chrome/app/resources/XCTRunnerAddition+Info.plist
index a0ba439..d251e559 100644
--- a/ios/chrome/app/resources/XCTRunnerAddition+Info.plist
+++ b/ios/chrome/app/resources/XCTRunnerAddition+Info.plist
@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleIdentifier</key>
-  <string>com.apple.test.${PRODUCT_NAME}-Runner</string>
+  <string>com.apple.test.${EXECUTABLE_NAME}-Runner</string>
   <key>CFBundleName</key>
   <string>${PRODUCT_NAME}</string>
 </dict>
diff --git a/ios/chrome/browser/BUILD.gn b/ios/chrome/browser/BUILD.gn
index 56163da..e9bafc0 100644
--- a/ios/chrome/browser/BUILD.gn
+++ b/ios/chrome/browser/BUILD.gn
@@ -94,6 +94,7 @@
     "//components/net_log",
     "//components/ntp_tiles",
     "//components/password_manager/core/common:common",
+    "//components/payments/core",
     "//components/pref_registry",
     "//components/prefs",
     "//components/proxy_config",
diff --git a/ios/chrome/browser/about_flags.mm b/ios/chrome/browser/about_flags.mm
index be8d405..c84fda96 100644
--- a/ios/chrome/browser/about_flags.mm
+++ b/ios/chrome/browser/about_flags.mm
@@ -26,6 +26,7 @@
 #include "components/flags_ui/flags_storage.h"
 #include "components/flags_ui/flags_ui_switches.h"
 #include "components/ntp_tiles/switches.h"
+#include "components/payments/core/features.h"
 #include "components/security_state/core/switches.h"
 #include "components/signin/core/common/signin_switches.h"
 #include "components/strings/grit/components_strings.h"
@@ -89,6 +90,9 @@
     {"mark-non-secure-as", flag_descriptions::kMarkHttpAsName,
      flag_descriptions::kMarkHttpAsDescription, flags_ui::kOsIos,
      MULTI_VALUE_TYPE(kMarkHttpAsChoices)},
+    {"web-payments", flag_descriptions::kWebPaymentsName,
+     flag_descriptions::kWebPaymentsDescription, flags_ui::kOsIos,
+     FEATURE_VALUE_TYPE(payments::features::kWebPayments)},
 };
 
 // Add all switches from experimental flags to |command_line|.
@@ -195,15 +199,6 @@
                                     web::BuildUserAgentFromProduct(product));
   }
 
-  // Populate command line flag for the Payment Request API.
-  NSString* enable_payment_request =
-      [defaults stringForKey:@"EnablePaymentRequest"];
-  if ([enable_payment_request isEqualToString:@"Enabled"]) {
-    command_line->AppendSwitch(switches::kEnablePaymentRequest);
-  } else if ([enable_payment_request isEqualToString:@"Disabled"]) {
-    command_line->AppendSwitch(switches::kDisablePaymentRequest);
-  }
-
   // Populate command line flag for Suggestions UI display.
   NSString* enableSuggestions = [defaults stringForKey:@"EnableSuggestions"];
   if ([enableSuggestions isEqualToString:@"Enabled"]) {
diff --git a/ios/chrome/browser/chrome_switches.cc b/ios/chrome/browser/chrome_switches.cc
index ac7a0df..6360310 100644
--- a/ios/chrome/browser/chrome_switches.cc
+++ b/ios/chrome/browser/chrome_switches.cc
@@ -37,9 +37,6 @@
 // Disable auto-reload of error pages if offline.
 const char kDisableOfflineAutoReload[] = "disable-offline-auto-reload";
 
-// Disable the Payment Request API.
-const char kDisablePaymentRequest[] = "disable-payment-request";
-
 // Disables the tab strip auto scroll new tabs.
 const char kDisableTabStripAutoScrollNewTabs[] =
     "disable-tab-strip-autoscroll-new-tabs";
@@ -88,9 +85,6 @@
 // Enable auto-reload of error pages if offline.
 const char kEnableOfflineAutoReload[] = "enable-offline-auto-reload";
 
-// Enable the Payment Request API.
-const char kEnablePaymentRequest[] = "enable-payment-request";
-
 // Enables context-sensitive reader mode button in the toolbar.
 const char kEnableReaderModeToolbarIcon[] = "enable-reader-mode-toolbar-icon";
 
diff --git a/ios/chrome/browser/chrome_switches.h b/ios/chrome/browser/chrome_switches.h
index 8a6db57c0..885b6e6 100644
--- a/ios/chrome/browser/chrome_switches.h
+++ b/ios/chrome/browser/chrome_switches.h
@@ -17,7 +17,6 @@
 extern const char kDisableLRUSnapshotCache[];
 extern const char kDisableNTPFavicons[];
 extern const char kDisableOfflineAutoReload[];
-extern const char kDisablePaymentRequest[];
 extern const char kDisableTabStripAutoScrollNewTabs[];
 extern const char kDisableIOSPhysicalWeb[];
 extern const char kDisableRequestMobileSite[];
@@ -34,7 +33,6 @@
 extern const char kEnableLRUSnapshotCache[];
 extern const char kEnableNTPFavicons[];
 extern const char kEnableOfflineAutoReload[];
-extern const char kEnablePaymentRequest[];
 extern const char kEnableReaderModeToolbarIcon[];
 extern const char kEnableSpotlightActions[];
 extern const char kEnableIOSPhysicalWeb[];
diff --git a/ios/chrome/browser/context_menu/context_menu_egtest.mm b/ios/chrome/browser/context_menu/context_menu_egtest.mm
index 8b957c6..29f0765 100644
--- a/ios/chrome/browser/context_menu/context_menu_egtest.mm
+++ b/ios/chrome/browser/context_menu/context_menu_egtest.mm
@@ -13,7 +13,6 @@
 #import "ios/chrome/test/app/tab_test_util.h"
 #include "ios/chrome/test/app/web_view_interaction_test_util.h"
 #import "ios/chrome/test/earl_grey/chrome_actions.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
@@ -98,7 +97,7 @@
                                                           block:^BOOL {
                                                             return NO;
                                                           }];
-  [myCondition waitWithTimeout:1U];
+  [myCondition waitWithTimeout:1];
 
   chrome_test_util::SelectTabAtIndexInCurrentMode(index);
 }
@@ -128,7 +127,7 @@
   GURL imageURL = web::test::HttpServer::MakeUrl(kUrlChromiumLogoImg);
   web::test::SetUpFileBasedHttpServer();
   [ChromeEarlGrey loadURL:pageURL];
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   LongPressElementAndTapOnButton(kChromiumImageID, OpenImageButton());
 
@@ -136,7 +135,7 @@
   [[EarlGrey selectElementWithMatcher:chrome_test_util::OmniboxText(
                                           imageURL.GetContent())]
       assertWithMatcher:grey_notNil()];
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 }
 
 // Tests that selecting "Open Image in New Tab" from the context menu properly
@@ -146,7 +145,7 @@
   GURL imageURL = web::test::HttpServer::MakeUrl(kUrlChromiumLogoImg);
   web::test::SetUpFileBasedHttpServer();
   [ChromeEarlGrey loadURL:pageURL];
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   LongPressElementAndTapOnButton(kChromiumImageID, OpenImageInNewTabButton());
 
@@ -156,7 +155,7 @@
   [[EarlGrey selectElementWithMatcher:chrome_test_util::OmniboxText(
                                           imageURL.GetContent())]
       assertWithMatcher:grey_notNil()];
-  chrome_test_util::AssertMainTabCount(2U);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 // Tests "Open in New Tab" on context menu.
@@ -173,7 +172,7 @@
 
   web::test::SetUpSimpleHttpServer(responses);
   [ChromeEarlGrey loadURL:initialURL];
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   LongPressElementAndTapOnButton(kDestinationLinkID, OpenLinkInNewTabButton());
 
@@ -183,7 +182,7 @@
   [[EarlGrey selectElementWithMatcher:chrome_test_util::OmniboxText(
                                           destinationURL.GetContent())]
       assertWithMatcher:grey_notNil()];
-  chrome_test_util::AssertMainTabCount(2U);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 // Tests "Open in New Tab" on context menu  on a link that requires scrolling
@@ -206,7 +205,7 @@
 
   web::test::SetUpSimpleHttpServer(responses);
   [ChromeEarlGrey loadURL:initialURL];
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   // Scroll down on the web view to make the link visible.
   // grey_swipeFastInDirecton will quickly scroll towards the bottom, and then
@@ -257,7 +256,7 @@
   [[EarlGrey selectElementWithMatcher:chrome_test_util::OmniboxText(
                                           destinationURL.GetContent())]
       assertWithMatcher:grey_notNil()];
-  chrome_test_util::AssertMainTabCount(2U);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 @end
diff --git a/ios/chrome/browser/experimental_flags.h b/ios/chrome/browser/experimental_flags.h
index 39c28ce..f47bc27 100644
--- a/ios/chrome/browser/experimental_flags.h
+++ b/ios/chrome/browser/experimental_flags.h
@@ -66,9 +66,6 @@
 // Whether password generation is enabled.
 bool IsPasswordGenerationEnabled();
 
-// Whether the Payment Request API is enabled or not.
-bool IsPaymentRequestEnabled();
-
 // Whether the Physical Web feature is enabled.
 bool IsPhysicalWebEnabled();
 
diff --git a/ios/chrome/browser/experimental_flags.mm b/ios/chrome/browser/experimental_flags.mm
index 3e55aff..b904c36 100644
--- a/ios/chrome/browser/experimental_flags.mm
+++ b/ios/chrome/browser/experimental_flags.mm
@@ -172,25 +172,6 @@
   return group_name != "Disabled";
 }
 
-bool IsPaymentRequestEnabled() {
-  // This call activates the field trial, if needed, so it must come before any
-  // early returns.
-  std::string group_name =
-      base::FieldTrialList::FindFullName("IOSPaymentRequest");
-
-  // Check if the experimental flag is forced on or off.
-  base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
-  if (command_line->HasSwitch(switches::kEnablePaymentRequest)) {
-    return true;
-  } else if (command_line->HasSwitch(switches::kDisablePaymentRequest)) {
-    return false;
-  }
-
-  // Check if the Finch experiment is turned on.
-  return base::StartsWith(group_name, "Enabled",
-                          base::CompareCase::INSENSITIVE_ASCII);
-}
-
 bool IsPhysicalWebEnabled() {
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
   if (command_line->HasSwitch(switches::kEnableIOSPhysicalWeb)) {
diff --git a/ios/chrome/browser/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/ios_chrome_flag_descriptions.cc
index 3e495df6..ce25eb2 100644
--- a/ios/chrome/browser/ios_chrome_flag_descriptions.cc
+++ b/ios/chrome/browser/ios_chrome_flag_descriptions.cc
@@ -38,4 +38,9 @@
 const char kMarkHttpAsNonSecureWhileIncognitoOrEditing[] =
     "Warn on HTTP while in Incognito mode or after editing forms";
 
+const char kWebPaymentsName[] = "Web Payments";
+
+const char kWebPaymentsDescription[] =
+    "Enable Payment Request API integration, a JavaScript API for merchants.";
+
 }  // namespace flag_descriptions
diff --git a/ios/chrome/browser/ios_chrome_flag_descriptions.h b/ios/chrome/browser/ios_chrome_flag_descriptions.h
index b1abced..8d47e5e 100644
--- a/ios/chrome/browser/ios_chrome_flag_descriptions.h
+++ b/ios/chrome/browser/ios_chrome_flag_descriptions.h
@@ -35,6 +35,10 @@
 // Description for the flag to enable Physical Web in the omnibox.
 extern const char kPhysicalWebDescription[];
 
+// Title and description for the flag to enable Web Payments.
+extern const char kWebPaymentsName[];
+extern const char kWebPaymentsDescription[];
+
 }  // namespace flag_descriptions
 
 #endif  // IOS_CHROME_BROWSER_IOS_CHROME_FLAG_DESCRIPTIONS_H_
diff --git a/ios/chrome/browser/metrics/tab_usage_recorder_egtest.mm b/ios/chrome/browser/metrics/tab_usage_recorder_egtest.mm
index db2e038c..d32ac78 100644
--- a/ios/chrome/browser/metrics/tab_usage_recorder_egtest.mm
+++ b/ios/chrome/browser/metrics/tab_usage_recorder_egtest.mm
@@ -24,7 +24,6 @@
 #import "ios/chrome/test/app/tab_test_util.h"
 #include "ios/chrome/test/app/web_view_interaction_test_util.h"
 #import "ios/chrome/test/earl_grey/chrome_actions.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
@@ -94,7 +93,7 @@
   chrome_test_util::OpenNewTab();
   [ChromeEarlGrey loadURL:url];
   [ChromeEarlGrey waitForWebViewContainingText:word];
-  chrome_test_util::AssertMainTabCount(number_of_tabs + 1);
+  [ChromeEarlGrey waitForMainTabCount:(number_of_tabs + 1)];
 }
 
 // Opens 2 new tabs with different URLs.
@@ -117,8 +116,7 @@
   id<GREYMatcher> new_main_tab_button_matcher =
       grey_accessibilityID(kToolsMenuNewTabId);
   WaitAndTap(new_main_tab_button_matcher, @"New tab button");
-
-  chrome_test_util::AssertMainTabCount(nb_main_tab + 1);
+  [ChromeEarlGrey waitForMainTabCount:(nb_main_tab + 1)];
 }
 
 // Closes a tab in the current tab model. Synchronize on tab number afterwards.
@@ -188,7 +186,7 @@
 
   // Open two tabs with urls.
   OpenTwoTabs();
-  chrome_test_util::AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   // Switch between the two tabs.  Both are currently in memory.
   chrome_test_util::SelectTabAtIndexInCurrentMode(0);
 
@@ -231,7 +229,7 @@
     chrome_test_util::OpenNewTab();
     [ChromeEarlGrey loadURL:url1];
     [ChromeEarlGrey waitForWebViewContainingText:kURL1FirstWord];
-    chrome_test_util::AssertMainTabCount(i + 1);
+    [ChromeEarlGrey waitForMainTabCount:(i + 1)];
   }
 
   // Switch between the tabs. They are currently in memory.
@@ -265,7 +263,7 @@
   // does not trigger a reload immediatly.
   chrome_test_util::OpenNewTab();
   OpenNewIncognitoTabUsingUIAndEvictMainTabs();
-  chrome_test_util::AssertIncognitoTabCount(1);
+  [ChromeEarlGrey waitForIncognitoTabCount:1];
 
   // Switch back to the normal tabs. Should be on tab one.
   SwitchToNormalMode();
@@ -295,7 +293,7 @@
 
   // Open two tabs with urls.
   OpenTwoTabs();
-  chrome_test_util::AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   // Set the normal tabs as 'cold start' tabs.
   GREYAssertTrue(chrome_test_util::SetCurrentTabsToBeColdStartTabs(),
                  @"Fail to state tabs as cold start tabs");
@@ -303,7 +301,7 @@
   // Open two incognito tabs with urls, clearing normal tabs from memory.
   OpenNewIncognitoTabUsingUIAndEvictMainTabs();
   OpenNewIncognitoTabUsingUIAndEvictMainTabs();
-  chrome_test_util::AssertIncognitoTabCount(2);
+  [ChromeEarlGrey waitForIncognitoTabCount:2];
 
   // Switch back to the normal tabs.
   SwitchToNormalMode();
@@ -347,7 +345,7 @@
 
   // Open two tabs with urls.
   OpenTwoTabs();
-  chrome_test_util::AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 
   // Simulate going into the background.
   GREYAssertTrue(chrome_test_util::SimulateTabsBackgrounding(),
@@ -393,7 +391,7 @@
   OpenNewIncognitoTabUsingUIAndEvictMainTabs();
   SwitchToNormalMode();
   [ChromeEarlGrey waitForWebViewContainingText:kURL1FirstWord];
-  chrome_test_util::AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   histogramTester.ExpectUniqueSample(kEvictedTabReloadSuccessRate,
                                      TabUsageRecorder::LOAD_SUCCESS, 1,
@@ -731,7 +729,7 @@
 
   [[EarlGrey selectElementWithMatcher:OpenLinkInNewTabButton()]
       performAction:grey_tap()];
-  chrome_test_util::AssertMainTabCount(numberOfTabs + 1);
+  [ChromeEarlGrey waitForMainTabCount:(numberOfTabs + 1)];
 
   SelectTabUsingUI(base::SysUTF8ToNSString(destinationURL.GetContent()));
 
diff --git a/ios/chrome/browser/metrics/tab_usage_recorder_test_util.mm b/ios/chrome/browser/metrics/tab_usage_recorder_test_util.mm
index 2c15bd4c..299a6c8 100644
--- a/ios/chrome/browser/metrics/tab_usage_recorder_test_util.mm
+++ b/ios/chrome/browser/metrics/tab_usage_recorder_test_util.mm
@@ -11,7 +11,7 @@
 #include "ios/chrome/browser/ui/ui_util.h"
 #include "ios/chrome/grit/ios_strings.h"
 #import "ios/chrome/test/app/tab_test_util.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
+#import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/testing/wait_util.h"
@@ -44,7 +44,7 @@
       grey_accessibilityID(kToolsMenuNewIncognitoTabId);
   [[EarlGrey selectElementWithMatcher:new_incognito_tab_button_matcher]
       performAction:grey_tap()];
-  chrome_test_util::AssertIncognitoTabCount(nb_incognito_tab + 1);
+  [ChromeEarlGrey waitForIncognitoTabCount:(nb_incognito_tab + 1)];
   ConditionBlock condition = ^bool {
     return chrome_test_util::IsIncognitoMode();
   };
diff --git a/ios/chrome/browser/resources/Settings.bundle/Experimental.plist b/ios/chrome/browser/resources/Settings.bundle/Experimental.plist
index cbc230c..e2bc006 100644
--- a/ios/chrome/browser/resources/Settings.bundle/Experimental.plist
+++ b/ios/chrome/browser/resources/Settings.bundle/Experimental.plist
@@ -556,28 +556,6 @@
 		</dict>
 		<dict>
 			<key>Type</key>
-			<string>PSMultiValueSpecifier</string>
-			<key>Title</key>
-			<string>Enable Payment Request</string>
-			<key>Key</key>
-			<string>EnablePaymentRequest</string>
-			<key>DefaultValue</key>
-			<string></string>
-			<key>Values</key>
-			<array>
-				<string></string>
-				<string>Enabled</string>
-				<string>Disabled</string>
-			</array>
-			<key>Titles</key>
-			<array>
-				<string>Default</string>
-				<string>Enabled</string>
-				<string>Disabled</string>
-			</array>
-		</dict>
-		<dict>
-			<key>Type</key>
 			<string>PSGroupSpecifier</string>
 			<key>Title</key>
 			<string>CSChromium</string>
diff --git a/ios/chrome/browser/ui/BUILD.gn b/ios/chrome/browser/ui/BUILD.gn
index 3e92360..d5c29b9 100644
--- a/ios/chrome/browser/ui/BUILD.gn
+++ b/ios/chrome/browser/ui/BUILD.gn
@@ -343,6 +343,7 @@
     "//components/bookmarks/browser",
     "//components/image_fetcher/ios",
     "//components/infobars/core",
+    "//components/payments/core",
     "//components/prefs",
     "//components/reading_list/core",
     "//components/search_engines",
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm
index d69583f..03d2806c58 100644
--- a/ios/chrome/browser/ui/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -16,6 +16,7 @@
 
 #include "base/base64.h"
 #include "base/command_line.h"
+#include "base/feature_list.h"
 #include "base/files/file_path.h"
 #include "base/format_macros.h"
 #include "base/i18n/rtl.h"
@@ -37,6 +38,7 @@
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/image_fetcher/ios/ios_image_data_fetcher_wrapper.h"
 #include "components/infobars/core/infobar_manager.h"
+#include "components/payments/core/features.h"
 #include "components/prefs/pref_service.h"
 #include "components/reading_list/core/reading_list_model.h"
 #include "components/search_engines/search_engines_pref_names.h"
@@ -1842,7 +1844,7 @@
     [_contextualSearchController setTab:[_model currentTab]];
   }
 
-  if (experimental_flags::IsPaymentRequestEnabled()) {
+  if (base::FeatureList::IsEnabled(payments::features::kWebPayments)) {
     _paymentRequestManager = [[PaymentRequestManager alloc]
         initWithBaseViewController:self
                       browserState:_browserState];
diff --git a/ios/chrome/browser/ui/find_bar/find_in_page_egtest.mm b/ios/chrome/browser/ui/find_bar/find_in_page_egtest.mm
index df1ba2a..158fda6 100644
--- a/ios/chrome/browser/ui/find_bar/find_in_page_egtest.mm
+++ b/ios/chrome/browser/ui/find_bar/find_in_page_egtest.mm
@@ -12,7 +12,6 @@
 #include "ios/chrome/browser/ui/tools_menu/tools_menu_constants.h"
 #import "ios/chrome/test/app/tab_test_util.h"
 #import "ios/chrome/test/earl_grey/accessibility_util.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
diff --git a/ios/chrome/browser/ui/fullscreen_egtest.mm b/ios/chrome/browser/ui/fullscreen_egtest.mm
index adc1fc42..8457b006 100644
--- a/ios/chrome/browser/ui/fullscreen_egtest.mm
+++ b/ios/chrome/browser/ui/fullscreen_egtest.mm
@@ -15,7 +15,6 @@
 #import "ios/chrome/test/app/chrome_test_util.h"
 #import "ios/chrome/test/app/settings_test_util.h"
 #import "ios/chrome/test/app/web_view_interaction_test_util.h"
-#include "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
@@ -282,7 +281,7 @@
 
   [ChromeEarlGrey loadURL:URL];
   [ChromeEarlGrey waitForWebViewContainingText:"link1"];
-  chrome_test_util::AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   // Hide the toolbar.
   HideToolbarUsingUI();
@@ -293,7 +292,7 @@
 
   // Check that a new Tab was created.
   [ChromeEarlGrey waitForWebViewContainingText:"link2"];
-  chrome_test_util::AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 
   AssertURLIs(destinationURL);
 
@@ -306,7 +305,7 @@
   [ChromeEarlGrey waitForWebViewContainingText:"link1"];
 
   // Make sure the toolbar is on the screen.
-  chrome_test_util::AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
   [ChromeEarlGreyUI waitForToolbarVisible:YES];
 }
 
diff --git a/ios/chrome/browser/ui/history/history_ui_egtest.mm b/ios/chrome/browser/ui/history/history_ui_egtest.mm
index acbdaaf..96384b87 100644
--- a/ios/chrome/browser/ui/history/history_ui_egtest.mm
+++ b/ios/chrome/browser/ui/history/history_ui_egtest.mm
@@ -23,7 +23,6 @@
 #include "ios/chrome/grit/ios_strings.h"
 #import "ios/chrome/test/app/chrome_test_util.h"
 #import "ios/chrome/test/earl_grey/accessibility_util.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
@@ -301,7 +300,7 @@
       selectElementWithMatcher:grey_kindOfClass([TransparentLinkButton class])]
       performAction:grey_tap()];
   // Assert that new tab with the link is opened, hence tab count of 2.
-  chrome_test_util::AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 // Tests that searching history displays only entries matching the search term.
@@ -414,7 +413,7 @@
   [[EarlGrey selectElementWithMatcher:chrome_test_util::OmniboxText(
                                           _URL1.GetContent())]
       assertWithMatcher:grey_notNil()];
-  chrome_test_util::AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 // Tests display and selection of 'Open in New Incognito Tab' in a context menu
@@ -434,8 +433,8 @@
   [[EarlGrey selectElementWithMatcher:chrome_test_util::OmniboxText(
                                           _URL1.GetContent())]
       assertWithMatcher:grey_notNil()];
-  chrome_test_util::AssertMainTabCount(1);
-  chrome_test_util::AssertIncognitoTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
+  [ChromeEarlGrey waitForIncognitoTabCount:1];
 }
 
 // Tests display and selection of 'Copy URL' in a context menu on a history
diff --git a/ios/chrome/browser/ui/infobars/infobar_egtest.mm b/ios/chrome/browser/ui/infobars/infobar_egtest.mm
index 1982579..61625bb 100644
--- a/ios/chrome/browser/ui/infobars/infobar_egtest.mm
+++ b/ios/chrome/browser/ui/infobars/infobar_egtest.mm
@@ -15,7 +15,6 @@
 #import "ios/chrome/browser/tabs/tab_model.h"
 #import "ios/chrome/test/app/chrome_test_util.h"
 #import "ios/chrome/test/app/tab_test_util.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
@@ -117,7 +116,7 @@
   const GURL testURL = web::test::HttpServer::MakeUrl(
       "http://ios/testing/data/http_server_files/pony.html");
   [ChromeEarlGrey loadURL:testURL];
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   // Add a test infobar to the current tab. Verify that the infobar is present
   // in the model and that the infobar view is visible on screen.
@@ -142,12 +141,12 @@
 
   // Create the first tab and navigate to the test page.
   [ChromeEarlGrey loadURL:destinationURL];
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   // Create the second tab, navigate to the test page, and add the test infobar.
   chrome_test_util::OpenNewTab();
   [ChromeEarlGrey loadURL:ponyURL];
-  chrome_test_util::AssertMainTabCount(2U);
+  [ChromeEarlGrey waitForMainTabCount:2];
   VerifyTestInfoBarVisibleForCurrentTab(false);
   GREYAssert(AddTestInfoBarToCurrentTab(),
              @"Failed to add infobar to second tab.");
@@ -164,7 +163,7 @@
   // Close the first tab.  Verify that there is only one tab remaining and its
   // infobar is visible.
   chrome_test_util::CloseCurrentTab();
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
   VerifyTestInfoBarVisibleForCurrentTab(true);
 }
 
diff --git a/ios/chrome/browser/ui/sad_tab/sad_tab_view_egtest.mm b/ios/chrome/browser/ui/sad_tab/sad_tab_view_egtest.mm
index 2aa6092..7383467 100644
--- a/ios/chrome/browser/ui/sad_tab/sad_tab_view_egtest.mm
+++ b/ios/chrome/browser/ui/sad_tab/sad_tab_view_egtest.mm
@@ -10,7 +10,6 @@
 #include "ios/chrome/browser/ui/tools_menu/tools_menu_constants.h"
 #import "ios/chrome/test/app/chrome_test_util.h"
 #import "ios/chrome/test/app/navigation_test_util.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
@@ -136,7 +135,7 @@
       grey_accessibilityID(kToolsMenuNewIncognitoTabId);
   [[EarlGrey selectElementWithMatcher:newIncognitoTabButtonMatcher]
       performAction:grey_tap()];
-  chrome_test_util::AssertIncognitoTabCount(1);
+  [ChromeEarlGrey waitForIncognitoTabCount:1];
   loadAndCheckSimpleURL();
 
   // Test an initial crash, and then a second crash in Incognito mode, as above.
diff --git a/ios/chrome/browser/ui/settings/block_popups_egtest.mm b/ios/chrome/browser/ui/settings/block_popups_egtest.mm
index 246f0b4..2eedc314 100644
--- a/ios/chrome/browser/ui/settings/block_popups_egtest.mm
+++ b/ios/chrome/browser/ui/settings/block_popups_egtest.mm
@@ -20,7 +20,6 @@
 #include "ios/chrome/test/app/web_view_interaction_test_util.h"
 #include "ios/chrome/test/earl_grey/accessibility_util.h"
 #import "ios/chrome/test/earl_grey/chrome_actions.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
@@ -172,13 +171,13 @@
 
   ScopedBlockPopupsPref prefSetter(CONTENT_SETTING_ALLOW);
   [ChromeEarlGrey loadURL:blockPopupsURL];
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   // Request popup and make sure the popup opened in a new tab.
   __unsafe_unretained NSError* error = nil;
   chrome_test_util::ExecuteJavaScript(kOpenPopupScript, &error);
   GREYAssert(!error, @"Error during script execution: %@", error);
-  chrome_test_util::AssertMainTabCount(2U);
+  [ChromeEarlGrey waitForMainTabCount:2];
 
   // No infobar should be displayed.
   [[EarlGrey selectElementWithMatcher:chrome_test_util::
@@ -202,7 +201,7 @@
 
   ScopedBlockPopupsPref prefSetter(CONTENT_SETTING_BLOCK);
   [ChromeEarlGrey loadURL:blockPopupsURL];
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   // Request popup, then make sure it was blocked and an infobar was displayed.
   // The window.open() call is run via async JS, so the infobar may not open
@@ -223,7 +222,7 @@
                                     error:&error];
                     return error == nil;
                   }] waitWithTimeout:4.0];
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 }
 
 // Tests that the "exceptions" section on the settings page is hidden and
diff --git a/ios/chrome/browser/ui/toolbar/toolbar_egtest.mm b/ios/chrome/browser/ui/toolbar/toolbar_egtest.mm
index 239dcf9..e838db4 100644
--- a/ios/chrome/browser/ui/toolbar/toolbar_egtest.mm
+++ b/ios/chrome/browser/ui/toolbar/toolbar_egtest.mm
@@ -17,7 +17,6 @@
 #include "ios/chrome/grit/ios_strings.h"
 #import "ios/chrome/test/app/chrome_test_util.h"
 #import "ios/chrome/test/app/tab_test_util.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
@@ -82,7 +81,7 @@
 
 // Verifies opening a new tab from the tools menu.
 - (void)testNewTabFromMenu {
-  chrome_test_util::AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   // Open tab via the UI.
   [ChromeEarlGreyUI openToolsMenu];
@@ -91,13 +90,13 @@
   [[EarlGrey selectElementWithMatcher:newTabButtonMatcher]
       performAction:grey_tap()];
 
-  chrome_test_util::AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 // Verifies opening a new incognito tab from the tools menu.
 // TODO(crbug.com/631078): Enable this test.
 - (void)FLAKY_testNewIncognitoTabFromMenu {
-  chrome_test_util::AssertIncognitoTabCount(0);
+  [ChromeEarlGrey waitForIncognitoTabCount:0];
 
   // Open incognito tab.
   [ChromeEarlGreyUI openToolsMenu];
@@ -106,7 +105,7 @@
   [[EarlGrey selectElementWithMatcher:newIncognitoTabButtonMatcher]
       performAction:grey_tap()];
 
-  chrome_test_util::AssertIncognitoTabCount(1);
+  [ChromeEarlGrey waitForIncognitoTabCount:1];
 }
 
 // Tests whether input mode in an omnibox can be canceled via "Cancel" button
diff --git a/ios/chrome/browser/ui/toolbar/toolbar_model_delegate_ios.h b/ios/chrome/browser/ui/toolbar/toolbar_model_delegate_ios.h
index 0a196a8a..2f45dd3 100644
--- a/ios/chrome/browser/ui/toolbar/toolbar_model_delegate_ios.h
+++ b/ios/chrome/browser/ui/toolbar/toolbar_model_delegate_ios.h
@@ -43,6 +43,7 @@
   scoped_refptr<net::X509Certificate> GetCertificate() const override;
   bool FailsMalwareCheck() const override;
   const gfx::VectorIcon* GetVectorIconOverride() const override;
+  bool IsOfflinePage() const override;
 
   WebStateList* web_state_list_;  // weak
 
diff --git a/ios/chrome/browser/ui/toolbar/toolbar_model_delegate_ios.mm b/ios/chrome/browser/ui/toolbar/toolbar_model_delegate_ios.mm
index b2fc7b8..7359072 100644
--- a/ios/chrome/browser/ui/toolbar/toolbar_model_delegate_ios.mm
+++ b/ios/chrome/browser/ui/toolbar/toolbar_model_delegate_ios.mm
@@ -109,3 +109,7 @@
 const gfx::VectorIcon* ToolbarModelDelegateIOS::GetVectorIconOverride() const {
   return nullptr;
 }
+
+bool ToolbarModelDelegateIOS::IsOfflinePage() const {
+  return false;
+}
diff --git a/ios/chrome/browser/web/BUILD.gn b/ios/chrome/browser/web/BUILD.gn
index 0e07ad4..ed357f0 100644
--- a/ios/chrome/browser/web/BUILD.gn
+++ b/ios/chrome/browser/web/BUILD.gn
@@ -132,6 +132,7 @@
     "//components/dom_distiller/core",
     "//components/error_page/common",
     "//components/infobars/core",
+    "//components/payments/core",
     "//components/prefs",
     "//components/resources",
     "//components/strings",
@@ -198,6 +199,7 @@
     "//base/test:test_support",
     "//components/content_settings/core/browser",
     "//components/infobars/core",
+    "//components/payments/core",
     "//ios/chrome/browser",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/content_settings:content_settings",
diff --git a/ios/chrome/browser/web/browsing_egtest.mm b/ios/chrome/browser/web/browsing_egtest.mm
index e35c430..2b73852 100644
--- a/ios/chrome/browser/web/browsing_egtest.mm
+++ b/ios/chrome/browser/web/browsing_egtest.mm
@@ -20,7 +20,6 @@
 #import "ios/chrome/test/app/chrome_test_util.h"
 #include "ios/chrome/test/app/navigation_test_util.h"
 #include "ios/chrome/test/app/web_view_interaction_test_util.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
@@ -228,11 +227,11 @@
   ScopedBlockPopupsPref prefSetter(CONTENT_SETTING_ALLOW);
 
   [ChromeEarlGrey loadURL:URL];
-  chrome_test_util::AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   chrome_test_util::TapWebViewElementWithId("link");
 
-  chrome_test_util::AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 
   // Verify the new tab was opened with the expected URL.
   [[EarlGrey selectElementWithMatcher:OmniboxText(destinationURL.GetContent())]
@@ -258,11 +257,11 @@
   ScopedBlockPopupsPref prefSetter(CONTENT_SETTING_ALLOW);
 
   [ChromeEarlGrey loadURL:URL];
-  chrome_test_util::AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   chrome_test_util::TapWebViewElementWithId("link");
 
-  chrome_test_util::AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 
   // Verify the new tab was opened with the expected URL.
   [[EarlGrey selectElementWithMatcher:OmniboxText(destinationURL.GetContent())]
@@ -298,11 +297,11 @@
   ScopedBlockPopupsPref prefSetter(CONTENT_SETTING_ALLOW);
 
   [ChromeEarlGrey loadURL:URL];
-  chrome_test_util::AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   chrome_test_util::TapWebViewElementWithId("link");
 
-  chrome_test_util::AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 
   // Verify the new tab was opened with the expected URL.
   [[EarlGrey selectElementWithMatcher:OmniboxText(anchorURL.GetContent())]
@@ -337,11 +336,11 @@
   ScopedBlockPopupsPref prefSetter(CONTENT_SETTING_ALLOW);
 
   [ChromeEarlGrey loadURL:URL];
-  chrome_test_util::AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   chrome_test_util::TapWebViewElementWithId("link");
 
-  chrome_test_util::AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 
   // Verify the new tab was opened with the expected URL.
   [[EarlGrey selectElementWithMatcher:OmniboxText(destinationURL.GetContent())]
@@ -392,8 +391,8 @@
   web::test::SetUpSimpleHttpServer(responses);
 
   // Assert that test is starting with one tab.
-  chrome_test_util::AssertMainTabCount(1U);
-  chrome_test_util::AssertIncognitoTabCount(0U);
+  [ChromeEarlGrey waitForMainTabCount:1];
+  [ChromeEarlGrey waitForIncognitoTabCount:0];
 
   [ChromeEarlGrey loadURL:URL];
 
@@ -407,7 +406,7 @@
   [ChromeEarlGrey waitForWebViewContainingText:"Hello world!"];
 
   // Verify that no new tabs were open which could load chrome://version.
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 }
 
 // Tests that evaluating user JavaScript that causes navigation correctly
diff --git a/ios/chrome/browser/web/browsing_prevent_default_egtest.mm b/ios/chrome/browser/web/browsing_prevent_default_egtest.mm
index b4f43d1..ae20c82 100644
--- a/ios/chrome/browser/web/browsing_prevent_default_egtest.mm
+++ b/ios/chrome/browser/web/browsing_prevent_default_egtest.mm
@@ -12,7 +12,6 @@
 #include "ios/chrome/browser/content_settings/host_content_settings_map_factory.h"
 #import "ios/chrome/test/app/chrome_test_util.h"
 #include "ios/chrome/test/app/web_view_interaction_test_util.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
@@ -92,7 +91,7 @@
 
   const GURL testURL = GetTestUrl();
   [ChromeEarlGrey loadURL:testURL];
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   // Tap on the test link and wait for the page to display "Click done", as an
   // indicator that the element was tapped.
@@ -100,7 +99,7 @@
   [ChromeEarlGrey waitForWebViewContainingText:"Click done"];
 
   // Check that no navigation occurred and no new tabs were opened.
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
   const GURL& currentURL =
       chrome_test_util::GetCurrentWebState()->GetVisibleURL();
   GREYAssert(currentURL == testURL, @"Page navigated unexpectedly %s",
@@ -133,7 +132,7 @@
 
   const GURL testURL = GetTestUrl();
   [ChromeEarlGrey loadURL:testURL];
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 
   // Tap on the test link.
   const std::string linkID =
@@ -149,7 +148,7 @@
                         chrome_test_util::GetCurrentWebState()->GetVisibleURL();
                     return currentURL == GURL(url::kAboutBlankURL);
                   }] waitWithTimeout:kConditionTimeout];
-  chrome_test_util::AssertMainTabCount(1U);
+  [ChromeEarlGrey waitForMainTabCount:1];
 }
 
 @end
diff --git a/ios/chrome/browser/web/cache_egtest.mm b/ios/chrome/browser/web/cache_egtest.mm
index 69e1eaa9..75ed8f5 100644
--- a/ios/chrome/browser/web/cache_egtest.mm
+++ b/ios/chrome/browser/web/cache_egtest.mm
@@ -15,7 +15,6 @@
 #include "ios/chrome/test/app/history_test_util.h"
 #include "ios/chrome/test/app/navigation_test_util.h"
 #include "ios/chrome/test/app/web_view_interaction_test_util.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
@@ -231,7 +230,7 @@
   // first allow popups.
   ScopedBlockPopupsPref prefSetter(CONTENT_SETTING_ALLOW);
   chrome_test_util::TapWebViewElementWithId(kCacheTestLinkID);
-  chrome_test_util::AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   [ChromeEarlGrey waitForPageToFinishLoading];
   [ChromeEarlGrey waitForWebViewContainingText:"First Page"];
   [ChromeEarlGrey waitForWebViewContainingText:"serverHitCounter: 3"];
diff --git a/ios/chrome/browser/web/child_window_open_by_dom_egtest.mm b/ios/chrome/browser/web/child_window_open_by_dom_egtest.mm
index dbe61de..b0abe97 100644
--- a/ios/chrome/browser/web/child_window_open_by_dom_egtest.mm
+++ b/ios/chrome/browser/web/child_window_open_by_dom_egtest.mm
@@ -9,7 +9,6 @@
 #include "ios/chrome/test/app/settings_test_util.h"
 #import "ios/chrome/test/app/tab_test_util.h"
 #include "ios/chrome/test/app/web_view_interaction_test_util.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
@@ -20,7 +19,6 @@
 #error "This file requires ARC support."
 #endif
 
-using chrome_test_util::AssertMainTabCount;
 using chrome_test_util::TapWebViewElementWithId;
 using web::test::HttpServer;
 
@@ -62,7 +60,7 @@
       "http://ios/testing/data/http_server_files/window_proxy.html";
   [ChromeEarlGrey loadURL:HttpServer::MakeUrl(kChildWindowTestURL)];
   [ChromeEarlGrey waitForWebViewContainingText:kNamedWindowLink];
-  AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
 }
 
 // Tests that multiple calls to window.open() with the same window name returns
@@ -70,11 +68,11 @@
 - (void)test2ChildWindowsWithName {
   // Open two windows with the same name.
   TapWebViewElementWithId(kNamedWindowLink);
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   chrome_test_util::SelectTabAtIndexInCurrentMode(0);
 
   TapWebViewElementWithId(kNamedWindowLink);
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   chrome_test_util::SelectTabAtIndexInCurrentMode(0);
 
   // Check that they're the same window.
@@ -88,11 +86,11 @@
 - (void)test2ChildWindowsWithoutName {
   // Open two unnamed windows.
   TapWebViewElementWithId(kUnnamedWindowLink);
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   chrome_test_util::SelectTabAtIndexInCurrentMode(0);
 
   TapWebViewElementWithId(kUnnamedWindowLink);
-  AssertMainTabCount(3);
+  [ChromeEarlGrey waitForMainTabCount:3];
   chrome_test_util::SelectTabAtIndexInCurrentMode(0);
 
   // Check that they aren't the same window object.
@@ -106,12 +104,12 @@
 - (void)testChildWindowsWithAndWithoutName {
   // Open a named window.
   TapWebViewElementWithId(kNamedWindowLink);
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   chrome_test_util::SelectTabAtIndexInCurrentMode(0);
 
   // Open an unnamed window.
   TapWebViewElementWithId(kUnnamedWindowLink);
-  AssertMainTabCount(3);
+  [ChromeEarlGrey waitForMainTabCount:3];
   chrome_test_util::SelectTabAtIndexInCurrentMode(0);
 
   // Check that they aren't the same window object.
@@ -127,7 +125,7 @@
 // object for that tab.
 - (void)testWindowClosedWithName {
   TapWebViewElementWithId("openWindowWithName");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   chrome_test_util::SelectTabAtIndexInCurrentMode(0);
 
   // Check that named window 1 is opened and named window 2 isn't.
@@ -142,14 +140,14 @@
   // Open another window with the same name. Check that named window 2 is now
   // opened.
   TapWebViewElementWithId("openWindowWithName");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   chrome_test_util::SelectTabAtIndexInCurrentMode(0);
   TapWebViewElementWithId(kCheckWindow2Link);
   [ChromeEarlGrey waitForWebViewContainingText:kWindow2Open];
 
   // Close the opened window. Check that named window 1 and 2 are both closed.
   chrome_test_util::CloseTabAtIndex(1);
-  AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
   TapWebViewElementWithId(kCheckWindow1Link);
   [ChromeEarlGrey waitForWebViewContainingText:kWindow1Closed];
   TapWebViewElementWithId(kCheckWindow2Link);
@@ -160,7 +158,7 @@
 // corresponding window object and not for any other window objects.
 - (void)testWindowClosedWithoutName {
   TapWebViewElementWithId("openWindowNoName");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   chrome_test_util::SelectTabAtIndexInCurrentMode(0);
 
   // Check that unnamed window 1 is opened and unnamed window 2 isn't.
@@ -174,7 +172,7 @@
 
   // Open another unnamed window. Check that unnamed window 2 is now opened.
   TapWebViewElementWithId("openWindowNoName");
-  AssertMainTabCount(3);
+  [ChromeEarlGrey waitForMainTabCount:3];
   chrome_test_util::SelectTabAtIndexInCurrentMode(0);
   TapWebViewElementWithId(kCheckWindow2Link);
   [ChromeEarlGrey waitForWebViewContainingText:kWindow2Open];
diff --git a/ios/chrome/browser/web/chrome_web_client.mm b/ios/chrome/browser/web/chrome_web_client.mm
index 06a3d00..92f5cbb 100644
--- a/ios/chrome/browser/web/chrome_web_client.mm
+++ b/ios/chrome/browser/web/chrome_web_client.mm
@@ -5,12 +5,14 @@
 #include "ios/chrome/browser/web/chrome_web_client.h"
 
 #include "base/command_line.h"
+#include "base/feature_list.h"
 #include "base/files/file_util.h"
 #include "base/ios/ios_util.h"
 #include "base/mac/bundle_locations.h"
 #include "base/memory/ptr_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/dom_distiller/core/url_constants.h"
+#include "components/payments/core/features.h"
 #include "components/prefs/pref_service.h"
 #include "components/strings/grit/components_strings.h"
 #include "components/task_scheduler_util/browser/initialization.h"
@@ -165,7 +167,7 @@
     web::BrowserState* browser_state) const {
   NSString* chrome_page_script = GetPageScript(@"chrome_bundle");
 
-  if (!experimental_flags::IsPaymentRequestEnabled())
+  if (!base::FeatureList::IsEnabled(payments::features::kWebPayments))
     return chrome_page_script;
 
   NSString* kScriptTemplate = @"%@; %@";
diff --git a/ios/chrome/browser/web/chrome_web_client_unittest.mm b/ios/chrome/browser/web/chrome_web_client_unittest.mm
index c271de6..6c29a61d 100644
--- a/ios/chrome/browser/web/chrome_web_client_unittest.mm
+++ b/ios/chrome/browser/web/chrome_web_client_unittest.mm
@@ -12,8 +12,8 @@
 #include "base/memory/ptr_util.h"
 #include "base/strings/string_split.h"
 #include "base/strings/sys_string_conversions.h"
-#include "ios/chrome/browser/chrome_switches.h"
-#include "ios/chrome/browser/experimental_flags.h"
+#include "base/test/scoped_feature_list.h"
+#include "components/payments/core/features.h"
 #include "ios/web/public/test/fakes/test_browser_state.h"
 #import "ios/web/public/test/js_test_util.h"
 #include "ios/web/public/test/scoped_testing_web_client.h"
@@ -101,8 +101,8 @@
   EXPECT_NSEQ(@"undefined", web::ExecuteJavaScript(
                                 web_view, @"typeof window.PaymentRequest"));
 
-  base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
-      switches::kEnablePaymentRequest, std::string());
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(payments::features::kWebPayments);
   script = web_client.Get()->GetEarlyPageScript(&browser_state);
   web::ExecuteJavaScript(web_view, script);
   EXPECT_NSEQ(@"function", web::ExecuteJavaScript(
diff --git a/ios/chrome/browser/web/window_open_by_dom_egtest.mm b/ios/chrome/browser/web/window_open_by_dom_egtest.mm
index 8ac49f67..b9228ebf 100644
--- a/ios/chrome/browser/web/window_open_by_dom_egtest.mm
+++ b/ios/chrome/browser/web/window_open_by_dom_egtest.mm
@@ -14,7 +14,6 @@
 #include "ios/chrome/test/app/settings_test_util.h"
 #import "ios/chrome/test/app/tab_test_util.h"
 #include "ios/chrome/test/app/web_view_interaction_test_util.h"
-#import "ios/chrome/test/earl_grey/chrome_assertions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
@@ -26,7 +25,6 @@
 #error "This file requires ARC support."
 #endif
 
-using chrome_test_util::AssertMainTabCount;
 using chrome_test_util::OmniboxText;
 using chrome_test_util::TapWebViewElementWithId;
 using web::test::HttpServer;
@@ -66,14 +64,14 @@
   // Open the test page. There should only be one tab open.
   [ChromeEarlGrey loadURL:HttpServer::MakeUrl(kTestURL)];
   [ChromeEarlGrey waitForWebViewContainingText:"Expected result"];
-  AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
 }
 
 // Tests that opening a link with target=_blank which then immediately closes
 // itself works.
 - (void)testLinkWithBlankTargetWithImmediateClose {
   TapWebViewElementWithId("webScenarioWindowOpenBlankTargetWithImmediateClose");
-  AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
 }
 
 // Tests that sessionStorage content is available for windows opened by DOM via
@@ -86,7 +84,7 @@
   GREYAssert(!error, @"Error during script execution: %@", error);
 
   TapWebViewElementWithId("webScenarioWindowOpenSameURLWithBlankTarget");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   [ChromeEarlGrey waitForWebViewContainingText:"Expected result"];
 
   id value = ExecuteJavaScript(@"sessionStorage.getItem('key');", &error);
@@ -97,31 +95,31 @@
 // Tests a link with target="_blank".
 - (void)testLinkWithBlankTarget {
   TapWebViewElementWithId("webScenarioWindowOpenRegularLink");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 // Tests a link with target="_blank" multiple times.
 - (void)testLinkWithBlankTargetMultipleTimes {
   TapWebViewElementWithId("webScenarioWindowOpenRegularLinkMultipleTimes");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   chrome_test_util::OpenNewTab();
-  AssertMainTabCount(3);
+  [ChromeEarlGrey waitForMainTabCount:3];
   chrome_test_util::SelectTabAtIndexInCurrentMode(0);
   TapWebViewElementWithId("webScenarioWindowOpenRegularLinkMultipleTimes");
-  AssertMainTabCount(4);
+  [ChromeEarlGrey waitForMainTabCount:4];
 }
 
 // Tests a window.open by assigning to window.location.
 - (void)testWindowOpenAndAssignToHref {
   TapWebViewElementWithId("webScenarioWindowOpenTabWithAssignmentToHref");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 // Tests that opening a window and calling window.location.assign works.
 - (void)testWindowOpenAndCallLocationAssign {
   // Open a child tab.
   TapWebViewElementWithId("webScenarioWindowOpenAndCallLocationAssign");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 
   // Ensure that the resulting tab is updated as expected.
   const GURL targetURL =
@@ -135,7 +133,7 @@
 - (void)testWindowOpenAndSetLocation {
   // Open a child tab.
   TapWebViewElementWithId("webScenarioWindowOpenAndSetLocation");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 
   // Ensure that the resulting tab is updated as expected.
   const GURL targetURL =
@@ -147,40 +145,40 @@
 // Tests a button that invokes window.open() with "_blank" target parameter.
 - (void)testWindowOpenWithBlankTarget {
   TapWebViewElementWithId("webScenarioWindowOpenWithBlankTarget");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 // Tests that opening a window with target=_blank which closes itself after 1
 // second delay.
 - (void)testLinkWithBlankTargetWithDelayedClose {
   TapWebViewElementWithId("webScenarioWindowOpenWithDelayedClose");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   base::test::ios::SpinRunLoopWithMinDelay(base::TimeDelta::FromSecondsD(1));
-  AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
 }
 
 // Tests a window.open used in a <button onClick> element.
 - (void)testWindowOpenWithButtonOnClick {
   TapWebViewElementWithId("webScenarioWindowOpenWithButtonOnClick");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 // Tests a button that invokes window.open with an empty target parameter.
 - (void)testWindowOpenWithEmptyTarget {
   TapWebViewElementWithId("webScenarioWindowOpenWithEmptyTarget");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 // Tests a link with JavaScript in the href.
 + (void)testWindowOpenWithJavaScriptInHref {
   TapWebViewElementWithId("webScenarioWindowOpenWithJavaScriptInHref");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 // Tests a window.open by running Meta-Refresh.
 - (void)testWindowOpenWithMetaRefresh {
   TapWebViewElementWithId("webScenarioWindowOpenWithMetaRefresh");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 // Tests that a link with an onclick that opens a tab and calls preventDefault
@@ -188,7 +186,7 @@
 - (void)testWindowOpenWithPreventDefaultLink {
   // Open a child tab.
   TapWebViewElementWithId("webScenarioWindowOpenWithPreventDefaultLink");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 
   // Ensure that the starting tab hasn't navigated.
   chrome_test_util::CloseCurrentTab();
@@ -202,7 +200,7 @@
 //    target="_blank">
 - (void)testWindowOpenWithAboutNewTabScript {
   TapWebViewElementWithId("webScenarioWindowOpenWithAboutNewTabScript");
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
   [[EarlGrey selectElementWithMatcher:OmniboxText("about:newtab")]
       assertWithMatcher:grey_notNil()];
 }
@@ -210,7 +208,7 @@
 // Tests that closing the current window using DOM fails.
 - (void)testCloseWindowNotOpenByDOM {
   TapWebViewElementWithId("webScenarioWindowClose");
-  AssertMainTabCount(1);
+  [ChromeEarlGrey waitForMainTabCount:1];
 }
 
 // Tests that popup blocking works when a popup is injected into a window before
@@ -221,7 +219,7 @@
   NSString* infobarText = GetBlockedPopupInfobarText(1);
   [[EarlGrey selectElementWithMatcher:grey_accessibilityLabel(infobarText)]
       assertWithMatcher:grey_notNil()];
-  AssertMainTabCount(2);
+  [ChromeEarlGrey waitForMainTabCount:2];
 }
 
 @end
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey.h b/ios/chrome/test/earl_grey/chrome_earl_grey.h
index 7a21506..9f53ff94 100644
--- a/ios/chrome/test/earl_grey/chrome_earl_grey.h
+++ b/ios/chrome/test/earl_grey/chrome_earl_grey.h
@@ -87,6 +87,14 @@
 // Waits for there to be no web view containing |text|. If the condition is not
 // met within a timeout, a GREYAssert is induced.
 + (void)waitForWebViewNotContainingText:(std::string)text;
+
+// Waits for there to be |count| number of non-incognito tabs. If the condition
+// is not met within a timeout, a GREYAssert is induced.
++ (void)waitForMainTabCount:(NSUInteger)count;
+
+// Waits for there to be |count| number of incognito tabs. If the condition is
+// not met within a timeout, a GREYAssert is induced.
++ (void)waitForIncognitoTabCount:(NSUInteger)count;
 @end
 
 #endif  // IOS_CHROME_TEST_EARL_GREY_CHROME_EARL_GREY_H_
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey.mm b/ios/chrome/test/earl_grey/chrome_earl_grey.mm
index af378f1..2eff22544 100644
--- a/ios/chrome/test/earl_grey/chrome_earl_grey.mm
+++ b/ios/chrome/test/earl_grey/chrome_earl_grey.mm
@@ -7,6 +7,7 @@
 #import <Foundation/Foundation.h>
 #import <WebKit/WebKit.h>
 
+#include "base/format_macros.h"
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
@@ -19,6 +20,7 @@
 #import "ios/chrome/test/app/history_test_util.h"
 #include "ios/chrome/test/app/navigation_test_util.h"
 #import "ios/chrome/test/app/static_html_view_test_util.h"
+#import "ios/chrome/test/app/tab_test_util.h"
 #import "ios/testing/wait_util.h"
 #import "ios/web/public/test/earl_grey/js_test_util.h"
 #import "ios/web/public/test/web_view_content_test_util.h"
@@ -204,4 +206,29 @@
   GREYAssert([condition waitWithTimeout:testing::kWaitForUIElementTimeout],
              @"Failed waiting for web view not containing %s", text.c_str());
 }
+
++ (void)waitForMainTabCount:(NSUInteger)count {
+  // Allow the UI to become idle, in case any tabs are being opened or closed.
+  [[GREYUIThreadExecutor sharedInstance] drainUntilIdle];
+  GREYCondition* condition = [GREYCondition
+      conditionWithName:@"Wait for main tab count"
+                  block:^BOOL {
+                    return chrome_test_util::GetMainTabCount() == count;
+                  }];
+  GREYAssert([condition waitWithTimeout:testing::kWaitForUIElementTimeout],
+             @"Failed waiting for main tab count to become %" PRIuNS, count);
+}
+
++ (void)waitForIncognitoTabCount:(NSUInteger)count {
+  // Allow the UI to become idle, in case any tabs are being opened or closed.
+  [[GREYUIThreadExecutor sharedInstance] drainUntilIdle];
+  GREYCondition* condition = [GREYCondition
+      conditionWithName:@"Wait for incognito tab count"
+                  block:^BOOL {
+                    return chrome_test_util::GetIncognitoTabCount() == count;
+                  }];
+  GREYAssert([condition waitWithTimeout:testing::kWaitForUIElementTimeout],
+             @"Failed waiting for incognito tab count to become %" PRIuNS,
+             count);
+}
 @end
diff --git a/mash/catalog_viewer/catalog_viewer.cc b/mash/catalog_viewer/catalog_viewer.cc
index ccaca82..c3ca399 100644
--- a/mash/catalog_viewer/catalog_viewer.cc
+++ b/mash/catalog_viewer/catalog_viewer.cc
@@ -222,11 +222,9 @@
 }
 
 void CatalogViewer::OnStart() {
-  aura_init_ = views::AuraInit::Create(
+  aura_init_ = base::MakeUnique<views::AuraInit>(
       context()->connector(), context()->identity(), "views_mus_resources.pak",
       std::string(), nullptr, views::AuraInit::Mode::AURA_MUS);
-  if (!aura_init_)
-    context()->QuitNow();
 }
 
 void CatalogViewer::OnBindInterface(
diff --git a/mash/example/views_examples/views_examples.cc b/mash/example/views_examples/views_examples.cc
index da9a8a50..e559bf9 100644
--- a/mash/example/views_examples/views_examples.cc
+++ b/mash/example/views_examples/views_examples.cc
@@ -31,12 +31,10 @@
  private:
   // service_manager::Service:
   void OnStart() override {
-    aura_init_ =
-        views::AuraInit::Create(context()->connector(), context()->identity(),
-                                "views_mus_resources.pak", std::string(),
-                                nullptr, views::AuraInit::Mode::AURA_MUS);
-    if (!aura_init_)
-      context()->QuitNow();
+    aura_init_ = base::MakeUnique<views::AuraInit>(
+        context()->connector(), context()->identity(),
+        "views_mus_resources.pak", std::string(), nullptr,
+        views::AuraInit::Mode::AURA_MUS);
   }
   void OnBindInterface(const service_manager::BindSourceInfo& source_info,
                        const std::string& interface_name,
diff --git a/mash/example/window_type_launcher/window_type_launcher.cc b/mash/example/window_type_launcher/window_type_launcher.cc
index 078005b9..021135e4 100644
--- a/mash/example/window_type_launcher/window_type_launcher.cc
+++ b/mash/example/window_type_launcher/window_type_launcher.cc
@@ -453,11 +453,9 @@
 }
 
 void WindowTypeLauncher::OnStart() {
-  aura_init_ = views::AuraInit::Create(
+  aura_init_ = base::MakeUnique<views::AuraInit>(
       context()->connector(), context()->identity(), "views_mus_resources.pak",
       std::string(), nullptr, views::AuraInit::Mode::AURA_MUS);
-  if (!aura_init_)
-    context()->QuitNow();
 }
 
 void WindowTypeLauncher::OnBindInterface(
diff --git a/mash/quick_launch/quick_launch.cc b/mash/quick_launch/quick_launch.cc
index 1a5dafa..a9f51a0f 100644
--- a/mash/quick_launch/quick_launch.cc
+++ b/mash/quick_launch/quick_launch.cc
@@ -171,13 +171,14 @@
 }
 
 void QuickLaunch::OnStart() {
+  aura_init_ = base::MakeUnique<views::AuraInit>(
+      context()->connector(), context()->identity(), "views_mus_resources.pak",
+      std::string(), nullptr, views::AuraInit::Mode::AURA_MUS);
+
   // If AuraInit was unable to initialize there is no longer a peer connection.
   // The ServiceManager is in the process of shutting down, however we haven't
   // been notified yet. Close our ServiceContext and shutdown.
-  aura_init_ = views::AuraInit::Create(
-      context()->connector(), context()->identity(), "views_mus_resources.pak",
-      std::string(), nullptr, views::AuraInit::Mode::AURA_MUS);
-  if (!aura_init_) {
+  if (!aura_init_->initialized()) {
     context()->QuitNow();
     return;
   }
diff --git a/mash/simple_wm/simple_wm.cc b/mash/simple_wm/simple_wm.cc
index 26ba8465..8850a38 100644
--- a/mash/simple_wm/simple_wm.cc
+++ b/mash/simple_wm/simple_wm.cc
@@ -364,13 +364,9 @@
   started_ = true;
   screen_ = base::MakeUnique<display::ScreenBase>();
   display::Screen::SetScreenInstance(screen_.get());
-  aura_init_ = views::AuraInit::Create(
+  aura_init_ = base::MakeUnique<views::AuraInit>(
       context()->connector(), context()->identity(), "views_mus_resources.pak",
       std::string(), nullptr, views::AuraInit::Mode::AURA_MUS_WINDOW_MANAGER);
-  if (!aura_init_) {
-    context()->QuitNow();
-    return;
-  }
   window_tree_client_ = base::MakeUnique<aura::WindowTreeClient>(
       context()->connector(), this, this);
   aura::Env::GetInstance()->SetWindowTreeClient(window_tree_client_.get());
diff --git a/mash/task_viewer/task_viewer.cc b/mash/task_viewer/task_viewer.cc
index d932576..cdc03e76 100644
--- a/mash/task_viewer/task_viewer.cc
+++ b/mash/task_viewer/task_viewer.cc
@@ -294,11 +294,9 @@
 }
 
 void TaskViewer::OnStart() {
-  aura_init_ = views::AuraInit::Create(
+  aura_init_ = base::MakeUnique<views::AuraInit>(
       context()->connector(), context()->identity(), "views_mus_resources.pak",
       std::string(), nullptr, views::AuraInit::Mode::AURA_MUS);
-  if (!aura_init_)
-    context()->QuitNow();
 }
 
 void TaskViewer::OnBindInterface(
diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc
index e4ecaa92..90bd2cc 100644
--- a/media/audio/audio_output_controller.cc
+++ b/media/audio/audio_output_controller.cc
@@ -279,8 +279,8 @@
   // may have already fired if OnMoreData() took an abnormal amount of time).
   // Since this thread is the only writer of |on_more_io_data_called_| once the
   // thread starts, its safe to compare and then increment.
-  if (base::AtomicRefCountIsZero(&on_more_io_data_called_))
-    base::AtomicRefCountInc(&on_more_io_data_called_);
+  if (on_more_io_data_called_.IsZero())
+    on_more_io_data_called_.Increment();
 
   sync_reader_->Read(dest);
 
@@ -289,7 +289,7 @@
 
   sync_reader_->RequestMoreData(delay, delay_timestamp, prior_frames_skipped);
 
-  if (base::AtomicRefCountIsOne(&should_duplicate_)) {
+  if (should_duplicate_.IsOne()) {
     const base::TimeTicks reference_time = delay_timestamp + delay;
     std::unique_ptr<AudioBus> copy(AudioBus::Create(params_));
     dest->CopyTo(copy.get());
@@ -492,7 +492,7 @@
     return;
 
   if (duplication_targets_.empty())
-    base::AtomicRefCountInc(&should_duplicate_);
+    should_duplicate_.Increment();
 
   duplication_targets_.insert(to_stream);
 }
@@ -503,7 +503,7 @@
 
   duplication_targets_.erase(to_stream);
   if (duplication_targets_.empty()) {
-    const bool is_nonzero = base::AtomicRefCountDec(&should_duplicate_);
+    const bool is_nonzero = should_duplicate_.Decrement();
     DCHECK(!is_nonzero);
   }
 }
@@ -519,7 +519,7 @@
   // If we should be playing and we haven't, that's a wedge.
   if (state_ == kPlaying) {
     UMA_HISTOGRAM_BOOLEAN("Media.AudioOutputControllerPlaybackStartupSuccess",
-                          base::AtomicRefCountIsOne(&on_more_io_data_called_));
+                          on_more_io_data_called_.IsOne());
   }
 }
 
diff --git a/mojo/common/BUILD.gn b/mojo/common/BUILD.gn
index 75af21a..1bf62d22 100644
--- a/mojo/common/BUILD.gn
+++ b/mojo/common/BUILD.gn
@@ -27,7 +27,7 @@
   ]
 
   # TODO(crbug.com/699569): Convert to use the new JS bindings.
-  use_new_js_bindings = false
+  js_bindings_mode = "both"
 }
 
 component("common_base") {
diff --git a/mojo/edk/system/data_pipe_consumer_dispatcher.cc b/mojo/edk/system/data_pipe_consumer_dispatcher.cc
index 2213949..1db8191 100644
--- a/mojo/edk/system/data_pipe_consumer_dispatcher.cc
+++ b/mojo/edk/system/data_pipe_consumer_dispatcher.cc
@@ -530,7 +530,7 @@
 
   ports::PortStatus port_status;
   int rv = node_controller_->node()->GetStatus(control_port_, &port_status);
-  peer_remote_ = port_status.peer_remote;
+  peer_remote_ = rv == ports::OK && port_status.peer_remote;
   if (rv != ports::OK || !port_status.receiving_messages) {
     DVLOG(1) << "Data pipe consumer " << pipe_id_ << " is aware of peer closure"
              << " [control_port=" << control_port_.name() << "]";
diff --git a/mojo/edk/system/data_pipe_producer_dispatcher.cc b/mojo/edk/system/data_pipe_producer_dispatcher.cc
index 86b573c3..0edfc586 100644
--- a/mojo/edk/system/data_pipe_producer_dispatcher.cc
+++ b/mojo/edk/system/data_pipe_producer_dispatcher.cc
@@ -480,7 +480,7 @@
 
   ports::PortStatus port_status;
   int rv = node_controller_->node()->GetStatus(control_port_, &port_status);
-  peer_remote_ = port_status.peer_remote;
+  peer_remote_ = rv == ports::OK && port_status.peer_remote;
   if (rv != ports::OK || !port_status.receiving_messages) {
     DVLOG(1) << "Data pipe producer " << pipe_id_ << " is aware of peer closure"
              << " [control_port=" << control_port_.name() << "]";
diff --git a/net/BUILD.gn b/net/BUILD.gn
index 69809871..651be873 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -140,8 +140,6 @@
     "base/net_string_util.h",
     "base/network_interfaces.cc",
     "base/network_interfaces.h",
-    "base/network_interfaces_posix.cc",
-    "base/network_interfaces_posix.h",
     "base/parse_number.cc",
     "base/parse_number.h",
     "base/port_util.cc",
@@ -465,10 +463,13 @@
       "base/network_delegate.h",
       "base/network_delegate_impl.cc",
       "base/network_delegate_impl.h",
+      "base/network_interfaces_getifaddrs.cc",
+      "base/network_interfaces_getifaddrs.h",
       "base/network_interfaces_linux.cc",
       "base/network_interfaces_linux.h",
-      "base/network_interfaces_mac.cc",
-      "base/network_interfaces_mac.h",
+      "base/network_interfaces_nacl.cc",
+      "base/network_interfaces_posix.cc",
+      "base/network_interfaces_posix.h",
       "base/network_interfaces_win.cc",
       "base/network_interfaces_win.h",
       "base/network_throttle_manager.h",
@@ -1810,6 +1811,18 @@
       ]
     }
 
+    if (!is_nacl) {
+      sources -= [ "base/network_interfaces_nacl.cc" ]
+    }
+
+    # Use getifaddrs() on POSIX platforms, except Linux and Android.
+    if (!is_posix || is_linux || is_android) {
+      sources -= [
+        "base/network_interfaces_getifaddrs.cc",
+        "base/network_interfaces_getifaddrs.h",
+      ]
+    }
+
     if (use_gio) {
       deps += [ "//build/linux/libgio" ]
     }
@@ -1903,8 +1916,6 @@
         "base/network_change_notifier_mac.h",
         "base/network_config_watcher_mac.cc",
         "base/network_config_watcher_mac.h",
-        "base/network_interfaces_mac.cc",
-        "base/network_interfaces_mac.h",
         "base/platform_mime_util_mac.mm",
         "cert/test_root_certs_mac.cc",
         "cert/x509_util_ios_and_mac.cc",
@@ -4520,6 +4531,7 @@
     "base/network_activity_monitor_unittest.cc",
     "base/network_change_notifier_unittest.cc",
     "base/network_change_notifier_win_unittest.cc",
+    "base/network_interfaces_getifaddrs_unittest.cc",
     "base/network_interfaces_unittest.cc",
     "base/network_throttle_manager_impl_unittest.cc",
     "base/parse_number_unittest.cc",
@@ -5384,6 +5396,11 @@
     bundle_deps = [ ":net_unittests_bundle_data" ]
   }
 
+  # Use getifaddrs() on POSIX platforms, except Linux and Android.
+  if (!is_posix || is_linux || is_android) {
+    sources -= [ "base/network_interfaces_getifaddrs_unittest.cc" ]
+  }
+
   # Unit tests that aren't supported by the current ICU alternatives on Android.
   if (is_android && use_platform_icu_alternatives) {
     sources -= [
diff --git a/net/base/data_url.cc b/net/base/data_url.cc
index 00ea694..410a3e3 100644
--- a/net/base/data_url.cc
+++ b/net/base/data_url.cc
@@ -10,6 +10,7 @@
 
 #include "base/base64.h"
 #include "base/stl_util.h"
+#include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "net/base/escape.h"
@@ -39,14 +40,13 @@
   if (comma == end)
     return false;
 
-  std::vector<std::string> meta_data =
-      base::SplitString(base::StringPiece(after_colon, comma), ";",
-                        base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
+  std::vector<base::StringPiece> meta_data =
+      base::SplitStringPiece(base::StringPiece(after_colon, comma), ";",
+                             base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
 
-  std::vector<std::string>::iterator iter = meta_data.begin();
-  if (iter != meta_data.end()) {
-    mime_type->swap(*iter);
-    *mime_type = base::ToLowerASCII(*mime_type);
+  auto iter = meta_data.cbegin();
+  if (iter != meta_data.cend()) {
+    *mime_type = base::ToLowerASCII(*iter);
     ++iter;
   }
 
@@ -55,12 +55,13 @@
   const size_t kCharsetTagLength = arraysize(kCharsetTag) - 1;
 
   bool base64_encoded = false;
-  for (; iter != meta_data.end(); ++iter) {
+  for (; iter != meta_data.cend(); ++iter) {
     if (!base64_encoded && *iter == kBase64Tag) {
       base64_encoded = true;
     } else if (charset->empty() &&
-               iter->compare(0, kCharsetTagLength, kCharsetTag) == 0) {
-      charset->assign(iter->substr(kCharsetTagLength));
+               base::StartsWith(*iter, kCharsetTag,
+                                base::CompareCase::SENSITIVE)) {
+      *charset = std::string(iter->substr(kCharsetTagLength));
       // The grammar for charset is not specially defined in RFC2045 and
       // RFC2397. It just needs to be a token.
       if (!HttpUtil::IsToken(*charset))
diff --git a/net/base/network_interfaces.h b/net/base/network_interfaces.h
index 9329795c..d3d9f4e 100644
--- a/net/base/network_interfaces.h
+++ b/net/base/network_interfaces.h
@@ -34,6 +34,18 @@
   // lifetime is reached. It is still valid but shouldn't be used to
   // create new connections.
   IP_ADDRESS_ATTRIBUTE_DEPRECATED = 1 << 1,
+
+  // Anycast address.
+  IP_ADDRESS_ATTRIBUTE_ANYCAST = 1 << 2,
+
+  // Tentative address.
+  IP_ADDRESS_ATTRIBUTE_TENTATIVE = 1 << 3,
+
+  // DAD detected duplicate.
+  IP_ADDRESS_ATTRIBUTE_DUPLICATED = 1 << 4,
+
+  // May be detached from the link.
+  IP_ADDRESS_ATTRIBUTE_DETACHED = 1 << 5,
 };
 
 // struct that is used by GetNetworkList() to represent a network
diff --git a/net/base/network_interfaces_getifaddrs.cc b/net/base/network_interfaces_getifaddrs.cc
new file mode 100644
index 0000000..9e86239
--- /dev/null
+++ b/net/base/network_interfaces_getifaddrs.cc
@@ -0,0 +1,242 @@
+// 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 "net/base/network_interfaces_getifaddrs.h"
+
+#include <ifaddrs.h>
+#include <net/if.h>
+#include <netinet/in.h>
+#include <sys/types.h>
+
+#include <memory>
+#include <set>
+
+#include "base/files/file_path.h"
+#include "base/logging.h"
+#include "base/posix/eintr_wrapper.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_tokenizer.h"
+#include "base/strings/string_util.h"
+#include "base/threading/thread_restrictions.h"
+#include "build/build_config.h"
+#include "net/base/ip_endpoint.h"
+#include "net/base/net_errors.h"
+#include "net/base/network_interfaces_posix.h"
+
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+#include <net/if_media.h>
+#include <netinet/in_var.h>
+#include <sys/ioctl.h>
+#endif  // !OS_IOS
+
+namespace net {
+namespace internal {
+
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+
+// MacOSX implementation of IPAttributesGetter which calls ioctl() on socket to
+// retrieve IP attributes.
+class IPAttributesGetterMac : public internal::IPAttributesGetter {
+ public:
+  IPAttributesGetterMac();
+  ~IPAttributesGetterMac() override;
+  bool IsInitialized() const override;
+  bool GetAddressAttributes(const ifaddrs* if_addr, int* attributes) override;
+  NetworkChangeNotifier::ConnectionType GetNetworkInterfaceType(
+      const ifaddrs* if_addr) override;
+
+ private:
+  int ioctl_socket_;
+};
+
+IPAttributesGetterMac::IPAttributesGetterMac()
+    : ioctl_socket_(socket(AF_INET6, SOCK_DGRAM, 0)) {
+  DCHECK_GE(ioctl_socket_, 0);
+}
+
+IPAttributesGetterMac::~IPAttributesGetterMac() {
+  if (IsInitialized()) {
+    PCHECK(IGNORE_EINTR(close(ioctl_socket_)) == 0);
+  }
+}
+
+bool IPAttributesGetterMac::IsInitialized() const {
+  return ioctl_socket_ >= 0;
+}
+
+int AddressFlagsToNetAddressAttributes(int flags) {
+  int result = 0;
+  if (flags & IN6_IFF_TEMPORARY) {
+    result |= IP_ADDRESS_ATTRIBUTE_TEMPORARY;
+  }
+  if (flags & IN6_IFF_DEPRECATED) {
+    result |= IP_ADDRESS_ATTRIBUTE_DEPRECATED;
+  }
+  if (flags & IN6_IFF_ANYCAST) {
+    result |= IP_ADDRESS_ATTRIBUTE_ANYCAST;
+  }
+  if (flags & IN6_IFF_TENTATIVE) {
+    result |= IP_ADDRESS_ATTRIBUTE_TENTATIVE;
+  }
+  if (flags & IN6_IFF_DUPLICATED) {
+    result |= IP_ADDRESS_ATTRIBUTE_DUPLICATED;
+  }
+  if (flags & IN6_IFF_DETACHED) {
+    result |= IP_ADDRESS_ATTRIBUTE_DETACHED;
+  }
+  return result;
+}
+
+bool IPAttributesGetterMac::GetAddressAttributes(const ifaddrs* if_addr,
+                                                 int* attributes) {
+  struct in6_ifreq ifr = {};
+  strncpy(ifr.ifr_name, if_addr->ifa_name, sizeof(ifr.ifr_name) - 1);
+  memcpy(&ifr.ifr_ifru.ifru_addr, if_addr->ifa_addr, if_addr->ifa_addr->sa_len);
+  int rv = ioctl(ioctl_socket_, SIOCGIFAFLAG_IN6, &ifr);
+  if (rv >= 0) {
+    *attributes = AddressFlagsToNetAddressAttributes(ifr.ifr_ifru.ifru_flags);
+  }
+  return (rv >= 0);
+}
+
+NetworkChangeNotifier::ConnectionType
+IPAttributesGetterMac::GetNetworkInterfaceType(const ifaddrs* if_addr) {
+  if (!IsInitialized())
+    return NetworkChangeNotifier::CONNECTION_UNKNOWN;
+
+  struct ifmediareq ifmr = {};
+  strncpy(ifmr.ifm_name, if_addr->ifa_name, sizeof(ifmr.ifm_name) - 1);
+
+  if (ioctl(ioctl_socket_, SIOCGIFMEDIA, &ifmr) != -1) {
+    if (ifmr.ifm_current & IFM_IEEE80211) {
+      return NetworkChangeNotifier::CONNECTION_WIFI;
+    }
+    if (ifmr.ifm_current & IFM_ETHER) {
+      return NetworkChangeNotifier::CONNECTION_ETHERNET;
+    }
+  }
+
+  return NetworkChangeNotifier::CONNECTION_UNKNOWN;
+}
+
+#endif  // defined(OS_MACOSX) && !defined(OS_IOS)
+
+bool IfaddrsToNetworkInterfaceList(int policy,
+                                   const ifaddrs* interfaces,
+                                   IPAttributesGetter* ip_attributes_getter,
+                                   NetworkInterfaceList* networks) {
+  // Enumerate the addresses assigned to network interfaces which are up.
+  for (const ifaddrs* interface = interfaces; interface != NULL;
+       interface = interface->ifa_next) {
+    // Skip loopback interfaces, and ones which are down.
+    if (!(IFF_RUNNING & interface->ifa_flags))
+      continue;
+    if (IFF_LOOPBACK & interface->ifa_flags)
+      continue;
+    // Skip interfaces with no address configured.
+    struct sockaddr* addr = interface->ifa_addr;
+    if (!addr)
+      continue;
+
+    // Skip unspecified addresses (i.e. made of zeroes) and loopback addresses
+    // configured on non-loopback interfaces.
+    if (IsLoopbackOrUnspecifiedAddress(addr))
+      continue;
+
+    std::string name = interface->ifa_name;
+    // Filter out VMware interfaces, typically named vmnet1 and vmnet8.
+    if (ShouldIgnoreInterface(name, policy)) {
+      continue;
+    }
+
+    NetworkChangeNotifier::ConnectionType connection_type =
+        NetworkChangeNotifier::CONNECTION_UNKNOWN;
+
+    int ip_attributes = IP_ADDRESS_ATTRIBUTE_NONE;
+
+    // Retrieve native ip attributes and convert to net version if a getter is
+    // given.
+    if (ip_attributes_getter && ip_attributes_getter->IsInitialized()) {
+      if (addr->sa_family == AF_INET6 &&
+          ip_attributes_getter->GetAddressAttributes(interface,
+                                                     &ip_attributes)) {
+        // Disallow addresses with attributes ANYCASE, DUPLICATED, TENTATIVE,
+        // and DETACHED as these are still progressing through duplicated
+        // address detection (DAD) or are not suitable to be used in an
+        // one-to-one communication and shouldn't be used by the application
+        // layer.
+        if (ip_attributes &
+            (IP_ADDRESS_ATTRIBUTE_ANYCAST | IP_ADDRESS_ATTRIBUTE_DUPLICATED |
+             IP_ADDRESS_ATTRIBUTE_TENTATIVE | IP_ADDRESS_ATTRIBUTE_DETACHED)) {
+          continue;
+        }
+      }
+
+      connection_type =
+          ip_attributes_getter->GetNetworkInterfaceType(interface);
+    }
+
+    IPEndPoint address;
+
+    int addr_size = 0;
+    if (addr->sa_family == AF_INET6) {
+      addr_size = sizeof(sockaddr_in6);
+    } else if (addr->sa_family == AF_INET) {
+      addr_size = sizeof(sockaddr_in);
+    }
+
+    if (address.FromSockAddr(addr, addr_size)) {
+      uint8_t prefix_length = 0;
+      if (interface->ifa_netmask) {
+        // If not otherwise set, assume the same sa_family as ifa_addr.
+        if (interface->ifa_netmask->sa_family == 0) {
+          interface->ifa_netmask->sa_family = addr->sa_family;
+        }
+        IPEndPoint netmask;
+        if (netmask.FromSockAddr(interface->ifa_netmask, addr_size)) {
+          prefix_length = MaskPrefixLength(netmask.address());
+        }
+      }
+      networks->push_back(NetworkInterface(
+          name, name, if_nametoindex(name.c_str()), connection_type,
+          address.address(), prefix_length, ip_attributes));
+    }
+  }
+
+  return true;
+}
+
+}  // namespace internal
+
+bool GetNetworkList(NetworkInterfaceList* networks, int policy) {
+  if (networks == NULL)
+    return false;
+
+  // getifaddrs() may require IO operations.
+  base::ThreadRestrictions::AssertIOAllowed();
+
+  ifaddrs* interfaces;
+  if (getifaddrs(&interfaces) < 0) {
+    PLOG(ERROR) << "getifaddrs";
+    return false;
+  }
+
+  std::unique_ptr<internal::IPAttributesGetter> ip_attributes_getter;
+
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+  ip_attributes_getter = base::MakeUnique<internal::IPAttributesGetterMac>();
+#endif
+
+  bool result = internal::IfaddrsToNetworkInterfaceList(
+      policy, interfaces, ip_attributes_getter.get(), networks);
+  freeifaddrs(interfaces);
+  return result;
+}
+
+std::string GetWifiSSID() {
+  NOTIMPLEMENTED();
+  return std::string();
+}
+
+}  // namespace net
diff --git a/net/base/network_interfaces_getifaddrs.h b/net/base/network_interfaces_getifaddrs.h
new file mode 100644
index 0000000..7ec8081
--- /dev/null
+++ b/net/base/network_interfaces_getifaddrs.h
@@ -0,0 +1,57 @@
+// 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 NET_BASE_NETWORK_INTERFACES_GETIFADDRS_H_
+#define NET_BASE_NETWORK_INTERFACES_GETIFADDRS_H_
+
+// network_interfaces_getaddrs.cc implements GetNetworkList() using getifaddrs()
+// API. It is a non-standard API, so not all POSIX systems implement it (e.g.
+// it doesn't exist on Android). It is used on MacOS, iOS and Fuchsia. On Linux
+// and Android interface is used to implement GetNetworkList(), see
+// network_interfaces_linux.cc.
+// This file defines IfaddrsToNetworkInterfaceList() so it can be called in
+// unittests.
+
+#include "net/base/net_export.h"
+#include "net/base/network_interfaces.h"
+
+#include <string>
+
+struct ifaddrs;
+
+namespace net {
+namespace internal {
+
+class NET_EXPORT_PRIVATE IPAttributesGetter {
+ public:
+  IPAttributesGetter() {}
+  virtual ~IPAttributesGetter() {}
+  virtual bool IsInitialized() const = 0;
+
+  // Returns false if the interface must be skipped. Otherwise sets |attributes|
+  // and returns true.
+  virtual bool GetAddressAttributes(const ifaddrs* if_addr,
+                                    int* attributes) = 0;
+
+  // Returns interface type for the given interface.
+  virtual NetworkChangeNotifier::ConnectionType GetNetworkInterfaceType(
+      const ifaddrs* if_addr) = 0;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(IPAttributesGetter);
+};
+
+// Converts ifaddrs list returned by getifaddrs() to NetworkInterfaceList. Also
+// filters the list interfaces according to |policy| (see
+// HostAddressSelectionPolicy).
+NET_EXPORT_PRIVATE bool IfaddrsToNetworkInterfaceList(
+    int policy,
+    const ifaddrs* interfaces,
+    IPAttributesGetter* ip_attributes_getter,
+    NetworkInterfaceList* networks);
+
+}  // namespace internal
+}  // namespace net
+
+#endif  // NET_BASE_NETWORK_INTERFACES_GETIFADDRS_H_
diff --git a/net/base/network_interfaces_getifaddrs_unittest.cc b/net/base/network_interfaces_getifaddrs_unittest.cc
new file mode 100644
index 0000000..2721c9df
--- /dev/null
+++ b/net/base/network_interfaces_getifaddrs_unittest.cc
@@ -0,0 +1,180 @@
+// 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 "net/base/network_interfaces_getifaddrs.h"
+
+#include <string>
+
+#include "build/build_config.h"
+#include "net/base/ip_endpoint.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+#include <ifaddrs.h>
+#include <net/if.h>
+#include <netinet/in.h>
+
+namespace net {
+namespace {
+
+class IPAttributesGetterTest : public internal::IPAttributesGetter {
+ public:
+  IPAttributesGetterTest() {}
+
+  // internal::IPAttributesGetter interface.
+  bool IsInitialized() const override { return true; }
+  bool GetAddressAttributes(const ifaddrs* if_addr, int* attributes) override {
+    *attributes = attributes_;
+    return true;
+  }
+  NetworkChangeNotifier::ConnectionType GetNetworkInterfaceType(
+      const ifaddrs* if_addr) override {
+    return NetworkChangeNotifier::CONNECTION_UNKNOWN;
+  }
+
+  void set_attributes(int attributes) { attributes_ = attributes; }
+
+ private:
+  int attributes_ = 0;
+};
+
+// Helper function to create a single valid ifaddrs
+bool FillIfaddrs(ifaddrs* interfaces,
+                 const char* ifname,
+                 uint flags,
+                 const IPAddress& ip_address,
+                 const IPAddress& ip_netmask,
+                 sockaddr_storage sock_addrs[2]) {
+  interfaces->ifa_next = nullptr;
+  interfaces->ifa_name = const_cast<char*>(ifname);
+  interfaces->ifa_flags = flags;
+
+  socklen_t sock_len = sizeof(sockaddr_storage);
+
+  // Convert to sockaddr for next check.
+  if (!IPEndPoint(ip_address, 0)
+           .ToSockAddr(reinterpret_cast<sockaddr*>(&sock_addrs[0]),
+                       &sock_len)) {
+    return false;
+  }
+  interfaces->ifa_addr = reinterpret_cast<sockaddr*>(&sock_addrs[0]);
+
+  sock_len = sizeof(sockaddr_storage);
+  if (!IPEndPoint(ip_netmask, 0)
+           .ToSockAddr(reinterpret_cast<sockaddr*>(&sock_addrs[1]),
+                       &sock_len)) {
+    return false;
+  }
+  interfaces->ifa_netmask = reinterpret_cast<sockaddr*>(&sock_addrs[1]);
+
+  return true;
+}
+
+static const char kIfnameEm1[] = "em1";
+static const char kIfnameVmnet[] = "vmnet";
+
+static const unsigned char kIPv6LocalAddr[] = {0, 0, 0, 0, 0, 0, 0, 0,
+                                               0, 0, 0, 0, 0, 0, 0, 1};
+
+// The following 3 addresses need to be changed together. IPv6Addr is the IPv6
+// address. IPv6Netmask is the mask address with as many leading bits set to 1
+// as the prefix length. IPv6AddrPrefix needs to match IPv6Addr with the same
+// number of bits as the prefix length.
+static const unsigned char kIPv6Addr[] = {0x24, 0x01, 0xfa, 0x00, 0x00, 0x04,
+                                          0x10, 0x00, 0xbe, 0x30, 0x5b, 0xff,
+                                          0xfe, 0xe5, 0x00, 0xc3};
+
+static const unsigned char kIPv6Netmask[] = {0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                                             0x00, 0x00, 0x00, 0x00};
+
+TEST(NetworkInterfacesTest, IfaddrsToNetworkInterfaceList) {
+  IPAddress ipv6_local_address(kIPv6LocalAddr);
+  IPAddress ipv6_address(kIPv6Addr);
+  IPAddress ipv6_netmask(kIPv6Netmask);
+
+  NetworkInterfaceList results;
+  IPAttributesGetterTest ip_attributes_getter;
+  sockaddr_storage addresses[2];
+  ifaddrs interface;
+
+  // Address of offline links should be ignored.
+  ASSERT_TRUE(FillIfaddrs(&interface, kIfnameEm1, IFF_UP, ipv6_address,
+                          ipv6_netmask, addresses));
+  EXPECT_TRUE(internal::IfaddrsToNetworkInterfaceList(
+      INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface, &ip_attributes_getter,
+      &results));
+  EXPECT_EQ(results.size(), 0ul);
+
+  // Local address should be trimmed out.
+  ASSERT_TRUE(FillIfaddrs(&interface, kIfnameEm1, IFF_RUNNING,
+                          ipv6_local_address, ipv6_netmask, addresses));
+  EXPECT_TRUE(internal::IfaddrsToNetworkInterfaceList(
+      INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface, &ip_attributes_getter,
+      &results));
+  EXPECT_EQ(results.size(), 0ul);
+
+  // vmware address should return by default.
+  ASSERT_TRUE(FillIfaddrs(&interface, kIfnameVmnet, IFF_RUNNING, ipv6_address,
+                          ipv6_netmask, addresses));
+  EXPECT_TRUE(internal::IfaddrsToNetworkInterfaceList(
+      INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface, &ip_attributes_getter,
+      &results));
+  EXPECT_EQ(results.size(), 1ul);
+  EXPECT_EQ(results[0].name, kIfnameVmnet);
+  EXPECT_EQ(results[0].prefix_length, 1ul);
+  EXPECT_EQ(results[0].address, ipv6_address);
+  results.clear();
+
+  // vmware address should be trimmed out if policy specified so.
+  ASSERT_TRUE(FillIfaddrs(&interface, kIfnameVmnet, IFF_RUNNING, ipv6_address,
+                          ipv6_netmask, addresses));
+  EXPECT_TRUE(internal::IfaddrsToNetworkInterfaceList(
+      EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface, &ip_attributes_getter,
+      &results));
+  EXPECT_EQ(results.size(), 0ul);
+  results.clear();
+
+  // Addresses with banned attributes should be ignored.
+  ip_attributes_getter.set_attributes(IP_ADDRESS_ATTRIBUTE_ANYCAST);
+  ASSERT_TRUE(FillIfaddrs(&interface, kIfnameEm1, IFF_RUNNING, ipv6_address,
+                          ipv6_netmask, addresses));
+  EXPECT_TRUE(internal::IfaddrsToNetworkInterfaceList(
+      INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface, &ip_attributes_getter,
+      &results));
+  EXPECT_EQ(results.size(), 0ul);
+  results.clear();
+
+  // Addresses with allowed attribute IFA_F_TEMPORARY should be returned and
+  // attributes should be translated correctly.
+  ip_attributes_getter.set_attributes(IP_ADDRESS_ATTRIBUTE_TEMPORARY);
+  ASSERT_TRUE(FillIfaddrs(&interface, kIfnameEm1, IFF_RUNNING, ipv6_address,
+                          ipv6_netmask, addresses));
+  EXPECT_TRUE(internal::IfaddrsToNetworkInterfaceList(
+      INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface, &ip_attributes_getter,
+      &results));
+  EXPECT_EQ(results.size(), 1ul);
+  EXPECT_EQ(results[0].name, kIfnameEm1);
+  EXPECT_EQ(results[0].prefix_length, 1ul);
+  EXPECT_EQ(results[0].address, ipv6_address);
+  EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_TEMPORARY);
+  results.clear();
+
+  // Addresses with allowed attribute IFA_F_DEPRECATED should be returned and
+  // attributes should be translated correctly.
+  ip_attributes_getter.set_attributes(IP_ADDRESS_ATTRIBUTE_DEPRECATED);
+  ASSERT_TRUE(FillIfaddrs(&interface, kIfnameEm1, IFF_RUNNING, ipv6_address,
+                          ipv6_netmask, addresses));
+  EXPECT_TRUE(internal::IfaddrsToNetworkInterfaceList(
+      INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface, &ip_attributes_getter,
+      &results));
+  EXPECT_EQ(results.size(), 1ul);
+  EXPECT_EQ(results[0].name, kIfnameEm1);
+  EXPECT_EQ(results[0].prefix_length, 1ul);
+  EXPECT_EQ(results[0].address, ipv6_address);
+  EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_DEPRECATED);
+  results.clear();
+}
+
+}  // namespace
+}  // namespace net
diff --git a/net/base/network_interfaces_linux.cc b/net/base/network_interfaces_linux.cc
index 1e506df..dfe2899 100644
--- a/net/base/network_interfaces_linux.cc
+++ b/net/base/network_interfaces_linux.cc
@@ -103,7 +103,7 @@
 std::string GetInterfaceSSID(const std::string& ifname) {
   base::ScopedFD ioctl_socket = GetSocketForIoctl();
   if (!ioctl_socket.is_valid())
-    return "";
+    return std::string();
   struct iwreq wreq = {};
   strncpy(wreq.ifr_name, ifname.c_str(), IFNAMSIZ - 1);
 
@@ -112,7 +112,7 @@
   wreq.u.essid.length = IW_ESSID_MAX_SIZE;
   if (ioctl(ioctl_socket.get(), SIOCGIWESSID, &wreq) != -1)
     return ssid;
-  return "";
+  return std::string();
 }
 
 bool GetNetworkListImpl(
@@ -190,12 +190,12 @@
   std::string connected_ssid;
   for (size_t i = 0; i < interfaces.size(); ++i) {
     if (interfaces[i].type != NetworkChangeNotifier::CONNECTION_WIFI)
-      return "";
+      return std::string();
     std::string ssid = get_interface_ssid(interfaces[i].name);
     if (i == 0) {
       connected_ssid = ssid;
     } else if (ssid != connected_ssid) {
-      return "";
+      return std::string();
     }
   }
   return connected_ssid;
@@ -232,7 +232,7 @@
     return internal::GetWifiSSIDFromInterfaceListInternal(
         networks, internal::GetInterfaceSSID);
   }
-  return "";
+  return std::string();
 }
 
 }  // namespace net
diff --git a/net/base/network_interfaces_mac.cc b/net/base/network_interfaces_mac.cc
deleted file mode 100644
index 8a6e482..0000000
--- a/net/base/network_interfaces_mac.cc
+++ /dev/null
@@ -1,252 +0,0 @@
-// Copyright (c) 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/base/network_interfaces_mac.h"
-
-#include <ifaddrs.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <sys/types.h>
-
-#include <memory>
-#include <set>
-
-#include "base/files/file_path.h"
-#include "base/logging.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_tokenizer.h"
-#include "base/strings/string_util.h"
-#include "base/threading/thread_restrictions.h"
-#include "net/base/escape.h"
-#include "net/base/ip_endpoint.h"
-#include "net/base/net_errors.h"
-#include "net/base/network_interfaces_posix.h"
-#include "url/gurl.h"
-
-#if !defined(OS_IOS)
-#include <net/if_media.h>
-#include <netinet/in_var.h>
-#include <sys/ioctl.h>
-#endif  // !OS_IOS
-
-namespace net {
-
-namespace {
-
-#if !defined(OS_IOS)
-
-// MacOSX implementation of IPAttributesGetterMac which calls ioctl on socket to
-// retrieve IP attributes.
-class IPAttributesGetterMacImpl : public internal::IPAttributesGetterMac {
- public:
-  IPAttributesGetterMacImpl();
-  ~IPAttributesGetterMacImpl() override;
-  bool IsInitialized() const override;
-  bool GetIPAttributes(const char* ifname,
-                       const sockaddr* sock_addr,
-                       int* native_attributes) override;
-
- private:
-  int ioctl_socket_;
-};
-
-IPAttributesGetterMacImpl::IPAttributesGetterMacImpl()
-    : ioctl_socket_(socket(AF_INET6, SOCK_DGRAM, 0)) {
-  DCHECK_GE(ioctl_socket_, 0);
-}
-
-bool IPAttributesGetterMacImpl::IsInitialized() const {
-  return ioctl_socket_ >= 0;
-}
-
-IPAttributesGetterMacImpl::~IPAttributesGetterMacImpl() {
-  if (ioctl_socket_ >= 0) {
-    close(ioctl_socket_);
-  }
-}
-
-bool IPAttributesGetterMacImpl::GetIPAttributes(const char* ifname,
-                                                const sockaddr* sock_addr,
-                                                int* native_attributes) {
-  struct in6_ifreq ifr = {};
-  strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1);
-  memcpy(&ifr.ifr_ifru.ifru_addr, sock_addr, sock_addr->sa_len);
-  int rv = ioctl(ioctl_socket_, SIOCGIFAFLAG_IN6, &ifr);
-  if (rv >= 0) {
-    *native_attributes = ifr.ifr_ifru.ifru_flags;
-  }
-  return (rv >= 0);
-}
-
-// When returning true, the platform native IPv6 address attributes were
-// successfully converted to net IP address attributes. Otherwise, returning
-// false and the caller should drop the IP address which can't be used by the
-// application layer.
-bool TryConvertNativeToNetIPAttributes(int native_attributes,
-                                       int* net_attributes) {
-  // For MacOSX, we disallow addresses with attributes IN6_IFF_ANYCASE,
-  // IN6_IFF_DUPLICATED, IN6_IFF_TENTATIVE, and IN6_IFF_DETACHED as these are
-  // still progressing through duplicated address detection (DAD) or are not
-  // suitable to be used in an one-to-one communication and shouldn't be used
-  // by the application layer.
-  if (native_attributes & (IN6_IFF_ANYCAST | IN6_IFF_DUPLICATED |
-                           IN6_IFF_TENTATIVE | IN6_IFF_DETACHED)) {
-    return false;
-  }
-
-  if (native_attributes & IN6_IFF_TEMPORARY) {
-    *net_attributes |= IP_ADDRESS_ATTRIBUTE_TEMPORARY;
-  }
-
-  if (native_attributes & IN6_IFF_DEPRECATED) {
-    *net_attributes |= IP_ADDRESS_ATTRIBUTE_DEPRECATED;
-  }
-
-  return true;
-}
-
-NetworkChangeNotifier::ConnectionType GetNetworkInterfaceType(
-    int addr_family,
-    const std::string& interface_name) {
-  NetworkChangeNotifier::ConnectionType type =
-      NetworkChangeNotifier::CONNECTION_UNKNOWN;
-
-  struct ifmediareq ifmr = {};
-  strncpy(ifmr.ifm_name, interface_name.c_str(), sizeof(ifmr.ifm_name) - 1);
-
-  int s = socket(addr_family, SOCK_DGRAM, 0);
-  if (s == -1) {
-    return type;
-  }
-
-  if (ioctl(s, SIOCGIFMEDIA, &ifmr) != -1) {
-    if (ifmr.ifm_current & IFM_IEEE80211) {
-      type = NetworkChangeNotifier::CONNECTION_WIFI;
-    } else if (ifmr.ifm_current & IFM_ETHER) {
-      type = NetworkChangeNotifier::CONNECTION_ETHERNET;
-    }
-  }
-  close(s);
-  return type;
-}
-
-#endif  // !OS_IOS
-}  // namespace
-
-namespace internal {
-
-bool GetNetworkListImpl(NetworkInterfaceList* networks,
-                        int policy,
-                        const ifaddrs* interfaces,
-                        IPAttributesGetterMac* ip_attributes_getter) {
-  // Enumerate the addresses assigned to network interfaces which are up.
-  for (const ifaddrs* interface = interfaces; interface != NULL;
-       interface = interface->ifa_next) {
-    // Skip loopback interfaces, and ones which are down.
-    if (!(IFF_RUNNING & interface->ifa_flags))
-      continue;
-    if (IFF_LOOPBACK & interface->ifa_flags)
-      continue;
-    // Skip interfaces with no address configured.
-    struct sockaddr* addr = interface->ifa_addr;
-    if (!addr)
-      continue;
-
-    // Skip unspecified addresses (i.e. made of zeroes) and loopback addresses
-    // configured on non-loopback interfaces.
-    if (IsLoopbackOrUnspecifiedAddress(addr))
-      continue;
-
-    const std::string& name = interface->ifa_name;
-    // Filter out VMware interfaces, typically named vmnet1 and vmnet8.
-    if (ShouldIgnoreInterface(name, policy)) {
-      continue;
-    }
-
-    NetworkChangeNotifier::ConnectionType connection_type =
-        NetworkChangeNotifier::CONNECTION_UNKNOWN;
-
-    int ip_attributes = IP_ADDRESS_ATTRIBUTE_NONE;
-
-#if !defined(OS_IOS)
-    // Retrieve native ip attributes and convert to net version if a getter is
-    // given.
-    if (ip_attributes_getter && ip_attributes_getter->IsInitialized()) {
-      int native_attributes = 0;
-      if (addr->sa_family == AF_INET6 &&
-          ip_attributes_getter->GetIPAttributes(
-              interface->ifa_name, interface->ifa_addr, &native_attributes)) {
-        if (!TryConvertNativeToNetIPAttributes(native_attributes,
-                                               &ip_attributes)) {
-          continue;
-        }
-      }
-    }
-
-    connection_type = GetNetworkInterfaceType(addr->sa_family, name);
-#endif  // !OS_IOS
-
-    IPEndPoint address;
-
-    int addr_size = 0;
-    if (addr->sa_family == AF_INET6) {
-      addr_size = sizeof(sockaddr_in6);
-    } else if (addr->sa_family == AF_INET) {
-      addr_size = sizeof(sockaddr_in);
-    }
-
-    if (address.FromSockAddr(addr, addr_size)) {
-      uint8_t prefix_length = 0;
-      if (interface->ifa_netmask) {
-        // If not otherwise set, assume the same sa_family as ifa_addr.
-        if (interface->ifa_netmask->sa_family == 0) {
-          interface->ifa_netmask->sa_family = addr->sa_family;
-        }
-        IPEndPoint netmask;
-        if (netmask.FromSockAddr(interface->ifa_netmask, addr_size)) {
-          prefix_length = MaskPrefixLength(netmask.address());
-        }
-      }
-      networks->push_back(NetworkInterface(
-          name, name, if_nametoindex(name.c_str()), connection_type,
-          address.address(), prefix_length, ip_attributes));
-    }
-  }
-
-  return true;
-}
-
-}  // namespace internal
-
-bool GetNetworkList(NetworkInterfaceList* networks, int policy) {
-  if (networks == NULL)
-    return false;
-
-  // getifaddrs() may require IO operations.
-  base::ThreadRestrictions::AssertIOAllowed();
-
-  ifaddrs* interfaces;
-  if (getifaddrs(&interfaces) < 0) {
-    PLOG(ERROR) << "getifaddrs";
-    return false;
-  }
-
-  std::unique_ptr<internal::IPAttributesGetterMac> ip_attributes_getter;
-
-#if !defined(OS_IOS)
-  ip_attributes_getter.reset(new IPAttributesGetterMacImpl());
-#endif
-
-  bool result = internal::GetNetworkListImpl(networks, policy, interfaces,
-                                             ip_attributes_getter.get());
-  freeifaddrs(interfaces);
-  return result;
-}
-
-std::string GetWifiSSID() {
-  NOTIMPLEMENTED();
-  return "";
-}
-
-}  // namespace net
diff --git a/net/base/network_interfaces_mac.h b/net/base/network_interfaces_mac.h
deleted file mode 100644
index 096134c..0000000
--- a/net/base/network_interfaces_mac.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef NET_BASE_NETWORK_INTERFACES_MAC_H_
-#define NET_BASE_NETWORK_INTERFACES_MAC_H_
-
-// This file is only used to expose some of the internals
-// of network_interfaces_mac.cc to tests.
-
-#include "base/macros.h"
-#include "net/base/net_export.h"
-#include "net/base/network_interfaces.h"
-
-struct ifaddrs;
-struct sockaddr;
-
-namespace net {
-namespace internal {
-
-class NET_EXPORT IPAttributesGetterMac {
- public:
-  IPAttributesGetterMac() {}
-  virtual ~IPAttributesGetterMac() {}
-  virtual bool IsInitialized() const = 0;
-  virtual bool GetIPAttributes(const char* ifname,
-                               const sockaddr* sock_addr,
-                               int* native_attributes) = 0;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(IPAttributesGetterMac);
-};
-
-NET_EXPORT bool GetNetworkListImpl(NetworkInterfaceList* networks,
-                                   int policy,
-                                   const ifaddrs* interfaces,
-                                   IPAttributesGetterMac* ip_attributes_getter);
-
-}  // namespace internal
-}  // namespace net
-
-#endif  // NET_BASE_NETWORK_INTERFACES_MAC_H_
diff --git a/net/base/network_interfaces_nacl.cc b/net/base/network_interfaces_nacl.cc
new file mode 100644
index 0000000..b25ca24
--- /dev/null
+++ b/net/base/network_interfaces_nacl.cc
@@ -0,0 +1,27 @@
+// 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 "net/base/network_interfaces.h"
+
+namespace net {
+
+bool GetNetworkList(NetworkInterfaceList* networks, int policy) {
+  NOTIMPLEMENTED();
+  return false;
+}
+
+std::string GetWifiSSID() {
+  NOTIMPLEMENTED();
+  return std::string();
+}
+
+WifiPHYLayerProtocol GetWifiPHYLayerProtocol() {
+  return WIFI_PHY_LAYER_PROTOCOL_UNKNOWN;
+}
+
+std::unique_ptr<ScopedWifiOptions> SetWifiOptions(int options) {
+  return nullptr;
+}
+
+}  // namespace net
diff --git a/net/base/network_interfaces_posix.cc b/net/base/network_interfaces_posix.cc
index 37f2d59..cb7c61c 100644
--- a/net/base/network_interfaces_posix.cc
+++ b/net/base/network_interfaces_posix.cc
@@ -1,23 +1,19 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright 2015 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "net/base/network_interfaces.h"
+#include "net/base/network_interfaces_posix.h"
 
+#include <net/if.h>
+#include <netinet/in.h>
 #include <sys/types.h>
 
 #include <memory>
 #include <set>
 
-#if !defined(OS_NACL)
-#include "net/base/network_interfaces_posix.h"
-#include <net/if.h>
-#include <netinet/in.h>
-#endif  // !defined(OS_NACL)
+#include "net/base/network_interfaces.h"
 
 namespace net {
-
-#if !defined(OS_NACL)
 namespace internal {
 
 // The application layer can pass |policy| defined in net_util.h to
@@ -58,25 +54,13 @@
 }
 
 }  // namespace internal
-#else   // OS_NACL
-bool GetNetworkList(NetworkInterfaceList* networks, int policy) {
-  NOTIMPLEMENTED();
-  return false;
-}
-
-std::string GetWifiSSID() {
-  NOTIMPLEMENTED();
-  return "";
-}
-#endif  // OS_NACL
 
 WifiPHYLayerProtocol GetWifiPHYLayerProtocol() {
   return WIFI_PHY_LAYER_PROTOCOL_UNKNOWN;
 }
 
 std::unique_ptr<ScopedWifiOptions> SetWifiOptions(int options) {
-  return std::unique_ptr<ScopedWifiOptions>();
+  return nullptr;
 }
 
-
 }  // namespace net
diff --git a/net/base/network_interfaces_posix.h b/net/base/network_interfaces_posix.h
index 3fe4977..9a2bc40 100644
--- a/net/base/network_interfaces_posix.h
+++ b/net/base/network_interfaces_posix.h
@@ -1,12 +1,12 @@
-// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Copyright 2015 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 #ifndef NET_BASE_NETWORK_INTERFACES_POSIX_H_
 #define NET_BASE_NETWORK_INTERFACES_POSIX_H_
 
-// This file is only used to expose some of the internals of
-// network_interfaces_posix.cc to network_interfaces_linux.cc and network_interfaces_mac.cc.
+// This file provides some basic functionality shared between
+// network_interfaces_linux.cc and network_interfaces_getifaddrs.cc.
 
 #include <string>
 
@@ -14,10 +14,9 @@
 
 namespace net {
 namespace internal {
-#if !defined(OS_NACL)
+
 bool ShouldIgnoreInterface(const std::string& name, int policy);
 bool IsLoopbackOrUnspecifiedAddress(const sockaddr* addr);
-#endif  // !OS_NACL
 
 }  // namespace internal
 }  // namespace net
diff --git a/net/base/network_interfaces_unittest.cc b/net/base/network_interfaces_unittest.cc
index 754a902a..7882d99 100644
--- a/net/base/network_interfaces_unittest.cc
+++ b/net/base/network_interfaces_unittest.cc
@@ -16,12 +16,6 @@
 #if !defined(OS_NACL) && !defined(OS_WIN)
 #include <net/if.h>
 #include <netinet/in.h>
-#if defined(OS_MACOSX)
-#include <ifaddrs.h>
-#if !defined(OS_IOS)
-#include <netinet/in_var.h>
-#endif  // !OS_IOS
-#endif  // OS_MACOSX
 #endif  // !OS_NACL && !OS_WIN
 
 #if defined(OS_WIN)
@@ -29,19 +23,17 @@
 #include <objbase.h>
 #endif  // OS_WIN
 
-#if !defined(OS_MACOSX) && !defined(OS_NACL) && !defined(OS_WIN)
+#if defined(OS_LINUX) || defined(OS_ANDROID)
 #include "net/base/address_tracker_linux.h"
-#endif  // !OS_MACOSX && !OS_NACL && !OS_WIN
+#endif  // OS_LINUX || OS_ANDROID
 
 #if defined(OS_WIN)
 #include "net/base/network_interfaces_win.h"
 #else  // OS_WIN
 #include "net/base/network_interfaces_posix.h"
-#if defined(OS_MACOSX)
-#include "net/base/network_interfaces_mac.h"
-#else  // OS_MACOSX
+#if defined(OS_LINUX) || defined(OS_ANDROID)
 #include "net/base/network_interfaces_linux.h"
-#endif  // OS_MACOSX
+#endif  // OS_LINUX || OS_ANDROID
 #endif  // OS_WIN
 
 namespace net {
@@ -57,58 +49,6 @@
 }
 #endif
 
-#if defined(OS_MACOSX)
-class IPAttributesGetterTest : public internal::IPAttributesGetterMac {
- public:
-  IPAttributesGetterTest() : native_attributes_(0) {}
-  bool IsInitialized() const override { return true; }
-  bool GetIPAttributes(const char* ifname,
-                       const sockaddr* sock_addr,
-                       int* native_attributes) override {
-    *native_attributes = native_attributes_;
-    return true;
-  }
-  void set_native_attributes(int native_attributes) {
-    native_attributes_ = native_attributes;
-  }
-
- private:
-  int native_attributes_;
-};
-
-// Helper function to create a single valid ifaddrs
-bool FillIfaddrs(ifaddrs* interfaces,
-                 const char* ifname,
-                 uint flags,
-                 const IPAddress& ip_address,
-                 const IPAddress& ip_netmask,
-                 sockaddr_storage sock_addrs[2]) {
-  interfaces->ifa_next = NULL;
-  interfaces->ifa_name = const_cast<char*>(ifname);
-  interfaces->ifa_flags = flags;
-
-  socklen_t sock_len = sizeof(sockaddr_storage);
-
-  // Convert to sockaddr for next check.
-  if (!IPEndPoint(ip_address, 0)
-           .ToSockAddr(reinterpret_cast<sockaddr*>(&sock_addrs[0]),
-                       &sock_len)) {
-    return false;
-  }
-  interfaces->ifa_addr = reinterpret_cast<sockaddr*>(&sock_addrs[0]);
-
-  sock_len = sizeof(sockaddr_storage);
-  if (!IPEndPoint(ip_netmask, 0)
-           .ToSockAddr(reinterpret_cast<sockaddr*>(&sock_addrs[1]),
-                       &sock_len)) {
-    return false;
-  }
-  interfaces->ifa_netmask = reinterpret_cast<sockaddr*>(&sock_addrs[1]);
-
-  return true;
-}
-#endif  // OS_MACOSX
-
 // Verify GetNetworkList().
 TEST(NetworkInterfacesTest, GetNetworkList) {
   NetworkInterfaceList list;
@@ -150,35 +90,15 @@
   }
 }
 
-static const char ifname_em1[] = "em1";
-#if defined(OS_WIN)
-static const char ifname_vm[] = "VMnet";
-#else
-static const char ifname_vm[] = "vmnet";
-#endif  // OS_WIN
+#if defined(OS_LINUX) || defined(OS_ANDROID)
 
-static const unsigned char kIPv6LocalAddr[] = {
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
-
-// The following 3 addresses need to be changed together. IPv6Addr is the IPv6
-// address. IPv6Netmask is the mask address with as many leading bits set to 1
-// as the prefix length. IPv6AddrPrefix needs to match IPv6Addr with the same
-// number of bits as the prefix length.
-static const unsigned char kIPv6Addr[] =
-  {0x24, 0x01, 0xfa, 0x00, 0x00, 0x04, 0x10, 0x00, 0xbe, 0x30, 0x5b, 0xff,
-   0xfe, 0xe5, 0x00, 0xc3};
-#if defined(OS_WIN)
-static const unsigned char kIPv6AddrPrefix[] =
-  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-   0x00, 0x00, 0x00, 0x00};
-#endif  // OS_WIN
-#if defined(OS_MACOSX)
-static const unsigned char kIPv6Netmask[] =
-  {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-   0x00, 0x00, 0x00, 0x00};
-#endif  // OS_MACOSX
-
-#if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(OS_NACL)
+static const char kIfnameEm1[] = "em1";
+static const char kIfnameVmnet[] = "vmnet";
+static const unsigned char kIPv6LocalAddr[] = {0, 0, 0, 0, 0, 0, 0, 0,
+                                               0, 0, 0, 0, 0, 0, 0, 1};
+static const unsigned char kIPv6Addr[] = {0x24, 0x01, 0xfa, 0x00, 0x00, 0x04,
+                                          0x10, 0x00, 0xbe, 0x30, 0x5b, 0xff,
+                                          0xfe, 0xe5, 0x00, 0xc3};
 
 char* CopyInterfaceName(const char* ifname, int ifname_size, char* output) {
   EXPECT_LT(ifname_size, IF_NAMESIZE);
@@ -187,14 +107,14 @@
 }
 
 char* GetInterfaceName(int interface_index, char* ifname) {
-  return CopyInterfaceName(ifname_em1, arraysize(ifname_em1), ifname);
+  return CopyInterfaceName(kIfnameEm1, arraysize(kIfnameEm1), ifname);
 }
 
 char* GetInterfaceNameVM(int interface_index, char* ifname) {
-  return CopyInterfaceName(ifname_vm, arraysize(ifname_vm), ifname);
+  return CopyInterfaceName(kIfnameVmnet, arraysize(kIfnameVmnet), ifname);
 }
 
-TEST(NetworkInterfacesTest, GetNetworkListTrimming) {
+TEST(NetworkInterfacesTest, NetworkListTrimmingLinux) {
   IPAddress ipv6_local_address(kIPv6LocalAddr);
   IPAddress ipv6_address(kIPv6Addr);
 
@@ -204,11 +124,11 @@
 
   // Interface 1 is offline.
   struct ifaddrmsg msg = {
-      AF_INET6,
-      1,               /* prefix length */
-      IFA_F_TEMPORARY, /* address flags */
-      0,               /* link scope */
-      1                /* link index */
+      AF_INET6,         // Address type
+      1,                // Prefix length
+      IFA_F_TEMPORARY,  // Address flags
+      0,                // Link scope
+      1                 // Link index
   };
 
   // Address of offline links should be ignored.
@@ -237,7 +157,7 @@
       &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, online_links,
       address_map, GetInterfaceNameVM));
   EXPECT_EQ(results.size(), 1ul);
-  EXPECT_EQ(results[0].name, ifname_vm);
+  EXPECT_EQ(results[0].name, kIfnameVmnet);
   EXPECT_EQ(results[0].prefix_length, 1ul);
   EXPECT_EQ(results[0].address, ipv6_address);
   results.clear();
@@ -270,7 +190,7 @@
       &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, online_links,
       address_map, GetInterfaceName));
   EXPECT_EQ(results.size(), 1ul);
-  EXPECT_EQ(results[0].name, ifname_em1);
+  EXPECT_EQ(results[0].name, kIfnameEm1);
   EXPECT_EQ(results[0].prefix_length, 1ul);
   EXPECT_EQ(results[0].address, ipv6_address);
   EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_TEMPORARY);
@@ -285,105 +205,27 @@
       &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, online_links,
       address_map, GetInterfaceName));
   EXPECT_EQ(results.size(), 1ul);
-  EXPECT_EQ(results[0].name, ifname_em1);
+  EXPECT_EQ(results[0].name, kIfnameEm1);
   EXPECT_EQ(results[0].prefix_length, 1ul);
   EXPECT_EQ(results[0].address, ipv6_address);
   EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_DEPRECATED);
   results.clear();
 }
 
-#elif defined(OS_MACOSX)
+#elif defined(OS_WIN)  // !OS_LINUX || OS_ANDROID
 
-TEST(NetworkInterfacesTest, GetNetworkListTrimming) {
-  IPAddress ipv6_local_address(kIPv6LocalAddr);
-  IPAddress ipv6_address(kIPv6Addr);
-  IPAddress ipv6_netmask(kIPv6Netmask);
+static const char kIfnameEm1[] = "em1";
+static const char kIfnameVmnet[] = "VMnet";
 
-  NetworkInterfaceList results;
-  IPAttributesGetterTest ip_attributes_getter;
-  sockaddr_storage addresses[2];
-  ifaddrs interface;
+static const unsigned char kIPv6LocalAddr[] = {0, 0, 0, 0, 0, 0, 0, 0,
+                                               0, 0, 0, 0, 0, 0, 0, 1};
 
-  // Address of offline links should be ignored.
-  ASSERT_TRUE(FillIfaddrs(&interface, ifname_em1, IFF_UP, ipv6_address,
-                          ipv6_netmask, addresses));
-  EXPECT_TRUE(internal::GetNetworkListImpl(
-      &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
-      &ip_attributes_getter));
-  EXPECT_EQ(results.size(), 0ul);
-
-  // Local address should be trimmed out.
-  ASSERT_TRUE(FillIfaddrs(&interface, ifname_em1, IFF_RUNNING,
-                          ipv6_local_address, ipv6_netmask, addresses));
-  EXPECT_TRUE(internal::GetNetworkListImpl(
-      &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
-      &ip_attributes_getter));
-  EXPECT_EQ(results.size(), 0ul);
-
-  // vmware address should return by default.
-  ASSERT_TRUE(FillIfaddrs(&interface, ifname_vm, IFF_RUNNING, ipv6_address,
-                          ipv6_netmask, addresses));
-  EXPECT_TRUE(internal::GetNetworkListImpl(
-      &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
-      &ip_attributes_getter));
-  EXPECT_EQ(results.size(), 1ul);
-  EXPECT_EQ(results[0].name, ifname_vm);
-  EXPECT_EQ(results[0].prefix_length, 1ul);
-  EXPECT_EQ(results[0].address, ipv6_address);
-  results.clear();
-
-  // vmware address should be trimmed out if policy specified so.
-  ASSERT_TRUE(FillIfaddrs(&interface, ifname_vm, IFF_RUNNING, ipv6_address,
-                          ipv6_netmask, addresses));
-  EXPECT_TRUE(internal::GetNetworkListImpl(
-      &results, EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
-      &ip_attributes_getter));
-  EXPECT_EQ(results.size(), 0ul);
-  results.clear();
-
-#if !defined(OS_IOS)
-  // Addresses with banned attributes should be ignored.
-  ip_attributes_getter.set_native_attributes(IN6_IFF_ANYCAST);
-  ASSERT_TRUE(FillIfaddrs(&interface, ifname_em1, IFF_RUNNING, ipv6_address,
-                          ipv6_netmask, addresses));
-  EXPECT_TRUE(internal::GetNetworkListImpl(
-      &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
-      &ip_attributes_getter));
-  EXPECT_EQ(results.size(), 0ul);
-  results.clear();
-
-  // Addresses with allowed attribute IFA_F_TEMPORARY should be returned and
-  // attributes should be translated correctly.
-  ip_attributes_getter.set_native_attributes(IN6_IFF_TEMPORARY);
-  ASSERT_TRUE(FillIfaddrs(&interface, ifname_em1, IFF_RUNNING, ipv6_address,
-                          ipv6_netmask, addresses));
-  EXPECT_TRUE(internal::GetNetworkListImpl(
-      &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
-      &ip_attributes_getter));
-  EXPECT_EQ(results.size(), 1ul);
-  EXPECT_EQ(results[0].name, ifname_em1);
-  EXPECT_EQ(results[0].prefix_length, 1ul);
-  EXPECT_EQ(results[0].address, ipv6_address);
-  EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_TEMPORARY);
-  results.clear();
-
-  // Addresses with allowed attribute IFA_F_DEPRECATED should be returned and
-  // attributes should be translated correctly.
-  ip_attributes_getter.set_native_attributes(IN6_IFF_DEPRECATED);
-  ASSERT_TRUE(FillIfaddrs(&interface, ifname_em1, IFF_RUNNING, ipv6_address,
-                          ipv6_netmask, addresses));
-  EXPECT_TRUE(internal::GetNetworkListImpl(
-      &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
-      &ip_attributes_getter));
-  EXPECT_EQ(results.size(), 1ul);
-  EXPECT_EQ(results[0].name, ifname_em1);
-  EXPECT_EQ(results[0].prefix_length, 1ul);
-  EXPECT_EQ(results[0].address, ipv6_address);
-  EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_DEPRECATED);
-  results.clear();
-#endif  // !OS_IOS
-}
-#elif defined(OS_WIN)  // !OS_MACOSX && !OS_WIN && !OS_NACL
+static const unsigned char kIPv6Addr[] = {0x24, 0x01, 0xfa, 0x00, 0x00, 0x04,
+                                          0x10, 0x00, 0xbe, 0x30, 0x5b, 0xff,
+                                          0xfe, 0xe5, 0x00, 0xc3};
+static const unsigned char kIPv6AddrPrefix[] = {
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
 
 // Helper function to create a valid IP_ADAPTER_ADDRESSES with reasonable
 // default value. The output is the |adapter_address|. All the rests are input
@@ -439,7 +281,7 @@
   return true;
 }
 
-TEST(NetworkInterfacesTest, GetNetworkListTrimming) {
+TEST(NetworkInterfacesTest, NetworkListTrimmingWindows) {
   IPAddress ipv6_local_address(kIPv6LocalAddr);
   IPAddress ipv6_address(kIPv6Addr);
   IPAddress ipv6_prefix(kIPv6AddrPrefix);
@@ -453,10 +295,8 @@
   adapter_address.FirstPrefix = &adapter_prefix;
 
   // Address of offline links should be ignored.
-  ASSERT_TRUE(FillAdapterAddress(
-      &adapter_address /* adapter_address */, ifname_em1 /* ifname */,
-      ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */,
-      addresses /* sock_addrs */));
+  ASSERT_TRUE(FillAdapterAddress(&adapter_address, kIfnameEm1, ipv6_address,
+                                 ipv6_prefix, addresses));
   adapter_address.OperStatus = IfOperStatusDown;
 
   EXPECT_TRUE(internal::GetNetworkListImpl(
@@ -465,10 +305,8 @@
   EXPECT_EQ(results.size(), 0ul);
 
   // Address on loopback interface should be trimmed out.
-  ASSERT_TRUE(FillAdapterAddress(
-      &adapter_address /* adapter_address */, ifname_em1 /* ifname */,
-      ipv6_local_address /* ip_address */, ipv6_prefix /* ip_netmask */,
-      addresses /* sock_addrs */));
+  ASSERT_TRUE(FillAdapterAddress(&adapter_address, kIfnameEm1,
+                                 ipv6_local_address, ipv6_prefix, addresses));
   adapter_address.IfType = IF_TYPE_SOFTWARE_LOOPBACK;
 
   EXPECT_TRUE(internal::GetNetworkListImpl(
@@ -476,34 +314,28 @@
   EXPECT_EQ(results.size(), 0ul);
 
   // vmware address should return by default.
-  ASSERT_TRUE(FillAdapterAddress(
-      &adapter_address /* adapter_address */, ifname_vm /* ifname */,
-      ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */,
-      addresses /* sock_addrs */));
+  ASSERT_TRUE(FillAdapterAddress(&adapter_address, kIfnameVmnet, ipv6_address,
+                                 ipv6_prefix, addresses));
   EXPECT_TRUE(internal::GetNetworkListImpl(
       &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &adapter_address));
   EXPECT_EQ(results.size(), 1ul);
-  EXPECT_EQ(results[0].name, ifname_vm);
+  EXPECT_EQ(results[0].name, kIfnameVmnet);
   EXPECT_EQ(results[0].prefix_length, 1ul);
   EXPECT_EQ(results[0].address, ipv6_address);
   EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_NONE);
   results.clear();
 
   // vmware address should be trimmed out if policy specified so.
-  ASSERT_TRUE(FillAdapterAddress(
-      &adapter_address /* adapter_address */, ifname_vm /* ifname */,
-      ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */,
-      addresses /* sock_addrs */));
+  ASSERT_TRUE(FillAdapterAddress(&adapter_address, kIfnameVmnet, ipv6_address,
+                                 ipv6_prefix, addresses));
   EXPECT_TRUE(internal::GetNetworkListImpl(
       &results, EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &adapter_address));
   EXPECT_EQ(results.size(), 0ul);
   results.clear();
 
-  // Addresses with incompleted DAD should be ignored.
-  ASSERT_TRUE(FillAdapterAddress(
-      &adapter_address /* adapter_address */, ifname_em1 /* ifname */,
-      ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */,
-      addresses /* sock_addrs */));
+  // Addresses with incomplete DAD should be ignored.
+  ASSERT_TRUE(FillAdapterAddress(&adapter_address, kIfnameEm1, ipv6_address,
+                                 ipv6_prefix, addresses));
   adapter_address.FirstUnicastAddress->DadState = IpDadStateTentative;
 
   EXPECT_TRUE(internal::GetNetworkListImpl(
@@ -514,10 +346,8 @@
   // Addresses with allowed attribute IpSuffixOriginRandom should be returned
   // and attributes should be translated correctly to
   // IP_ADDRESS_ATTRIBUTE_TEMPORARY.
-  ASSERT_TRUE(FillAdapterAddress(
-      &adapter_address /* adapter_address */, ifname_em1 /* ifname */,
-      ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */,
-      addresses /* sock_addrs */));
+  ASSERT_TRUE(FillAdapterAddress(&adapter_address, kIfnameEm1, ipv6_address,
+                                 ipv6_prefix, addresses));
   adapter_address.FirstUnicastAddress->PrefixOrigin =
       IpPrefixOriginRouterAdvertisement;
   adapter_address.FirstUnicastAddress->SuffixOrigin = IpSuffixOriginRandom;
@@ -525,7 +355,7 @@
   EXPECT_TRUE(internal::GetNetworkListImpl(
       &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &adapter_address));
   EXPECT_EQ(results.size(), 1ul);
-  EXPECT_EQ(results[0].name, ifname_em1);
+  EXPECT_EQ(results[0].name, kIfnameEm1);
   EXPECT_EQ(results[0].prefix_length, 1ul);
   EXPECT_EQ(results[0].address, ipv6_address);
   EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_TEMPORARY);
@@ -534,24 +364,22 @@
   // Addresses with preferred lifetime 0 should be returned and
   // attributes should be translated correctly to
   // IP_ADDRESS_ATTRIBUTE_DEPRECATED.
-  ASSERT_TRUE(FillAdapterAddress(
-      &adapter_address /* adapter_address */, ifname_em1 /* ifname */,
-      ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */,
-      addresses /* sock_addrs */));
+  ASSERT_TRUE(FillAdapterAddress(&adapter_address, kIfnameEm1, ipv6_address,
+                                 ipv6_prefix, addresses));
   adapter_address.FirstUnicastAddress->PreferredLifetime = 0;
   adapter_address.FriendlyName = const_cast<PWCHAR>(L"FriendlyInterfaceName");
   EXPECT_TRUE(internal::GetNetworkListImpl(
       &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &adapter_address));
   EXPECT_EQ(results.size(), 1ul);
   EXPECT_EQ(results[0].friendly_name, "FriendlyInterfaceName");
-  EXPECT_EQ(results[0].name, ifname_em1);
+  EXPECT_EQ(results[0].name, kIfnameEm1);
   EXPECT_EQ(results[0].prefix_length, 1ul);
   EXPECT_EQ(results[0].address, ipv6_address);
   EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_DEPRECATED);
   results.clear();
 }
 
-#endif  // !OS_MACOSX && !OS_WIN && !OS_NACL
+#endif  // OS_WIN
 
 TEST(NetworkInterfacesTest, GetWifiSSID) {
   // We can't check the result of GetWifiSSID() directly, since the result
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc
index 2eb58ee9..7f106673 100644
--- a/net/http/http_network_session.cc
+++ b/net/http/http_network_session.cc
@@ -190,7 +190,6 @@
                              : QuicChromiumClock::GetInstance(),
           params.quic_max_packet_length,
           params.quic_user_agent_id,
-          params.quic_supported_versions,
           params.quic_max_server_configs_stored_in_properties > 0,
           params.quic_close_sessions_on_ip_change,
           params.mark_quic_broken_when_network_blackholes,
diff --git a/net/http/http_server_properties.h b/net/http/http_server_properties.h
index 49787f6..7ff4e5a 100644
--- a/net/http/http_server_properties.h
+++ b/net/http/http_server_properties.h
@@ -175,6 +175,12 @@
     return alternative_service_;
   }
 
+  NextProto protocol() const { return alternative_service_.protocol; }
+
+  HostPortPair host_port_pair() const {
+    return alternative_service_.host_port_pair();
+  }
+
   base::Time expiration() const { return expiration_; }
 
   const QuicVersionVector& advertised_versions() const {
diff --git a/net/http/http_stream_factory_impl_job.cc b/net/http/http_stream_factory_impl_job.cc
index 700acdd..a92fc4f6 100644
--- a/net/http/http_stream_factory_impl_job.cc
+++ b/net/http/http_stream_factory_impl_job.cc
@@ -162,6 +162,7 @@
                                 HostPortPair destination,
                                 GURL origin_url,
                                 NextProto alternative_protocol,
+                                QuicVersion quic_version,
                                 const ProxyServer& alternative_proxy_server,
                                 bool enable_ip_based_pooling,
                                 NetLog* net_log)
@@ -188,6 +189,7 @@
       using_quic_(
           alternative_protocol == kProtoQUIC ||
           ShouldForceQuic(session, destination, origin_url, proxy_info)),
+      quic_version_(quic_version),
       expect_spdy_(alternative_protocol == kProtoHTTP2 && !using_quic_),
       using_spdy_(false),
       should_reconsider_proxy_(false),
@@ -208,6 +210,16 @@
       stream_type_(HttpStreamRequest::BIDIRECTIONAL_STREAM),
       init_connection_already_resumed_(false),
       ptr_factory_(this) {
+  // The Job is forced to use QUIC without a designated version, try the
+  // preferred QUIC version that is supported by default.
+  if (quic_version_ == QUIC_VERSION_UNSUPPORTED &&
+      ShouldForceQuic(session, destination, origin_url, proxy_info)) {
+    quic_version_ = session->params().quic_supported_versions[0];
+  }
+
+  if (using_quic_)
+    DCHECK_NE(quic_version_, QUIC_VERSION_UNSUPPORTED);
+
   DCHECK(session);
   if (alternative_protocol != kProtoUnknown) {
     // The job cannot have protocol requirements dictated by alternative service
@@ -898,10 +910,10 @@
       destination = destination_;
       ssl_config = &server_ssl_config_;
     }
-    int rv =
-        quic_request_.Request(destination, request_info_.privacy_mode,
-                              ssl_config->GetCertVerifyFlags(), url,
-                              request_info_.method, net_log_, io_callback_);
+    int rv = quic_request_.Request(
+        destination, quic_version_, request_info_.privacy_mode,
+        ssl_config->GetCertVerifyFlags(), url, request_info_.method, net_log_,
+        io_callback_);
     if (rv == OK) {
       using_existing_quic_session_ = true;
     } else {
@@ -1466,7 +1478,8 @@
   return base::MakeUnique<HttpStreamFactoryImpl::Job>(
       delegate, job_type, session, request_info, priority, proxy_info,
       server_ssl_config, proxy_ssl_config, destination, origin_url,
-      kProtoUnknown, ProxyServer(), enable_ip_based_pooling, net_log);
+      kProtoUnknown, QUIC_VERSION_UNSUPPORTED, ProxyServer(),
+      enable_ip_based_pooling, net_log);
 }
 
 std::unique_ptr<HttpStreamFactoryImpl::Job>
@@ -1482,12 +1495,14 @@
     HostPortPair destination,
     GURL origin_url,
     NextProto alternative_protocol,
+    QuicVersion quic_version,
     bool enable_ip_based_pooling,
     NetLog* net_log) {
   return base::MakeUnique<HttpStreamFactoryImpl::Job>(
       delegate, job_type, session, request_info, priority, proxy_info,
       server_ssl_config, proxy_ssl_config, destination, origin_url,
-      alternative_protocol, ProxyServer(), enable_ip_based_pooling, net_log);
+      alternative_protocol, quic_version, ProxyServer(),
+      enable_ip_based_pooling, net_log);
 }
 
 std::unique_ptr<HttpStreamFactoryImpl::Job>
@@ -1508,8 +1523,8 @@
   return base::MakeUnique<HttpStreamFactoryImpl::Job>(
       delegate, job_type, session, request_info, priority, proxy_info,
       server_ssl_config, proxy_ssl_config, destination, origin_url,
-      kProtoUnknown, alternative_proxy_server, enable_ip_based_pooling,
-      net_log);
+      kProtoUnknown, QUIC_VERSION_UNSUPPORTED, alternative_proxy_server,
+      enable_ip_based_pooling, net_log);
 }
 
 }  // namespace net
diff --git a/net/http/http_stream_factory_impl_job.h b/net/http/http_stream_factory_impl_job.h
index dbfa4d1..e47b789 100644
--- a/net/http/http_stream_factory_impl_job.h
+++ b/net/http/http_stream_factory_impl_job.h
@@ -190,6 +190,7 @@
       HostPortPair destination,
       GURL origin_url,
       NextProto alternative_protocol,
+      QuicVersion quic_version,
       const ProxyServer& alternative_proxy_server,
       bool enable_ip_based_pooling,
       NetLog* net_log);
@@ -445,6 +446,10 @@
   // True if Job uses QUIC.
   const bool using_quic_;
 
+  // QuicVersion that should be used to connect to the QUIC server if Job uses
+  // QUIC.
+  QuicVersion quic_version_;
+
   // True if Alternative Service protocol field requires that HTTP/2 is used.
   // In this case, Job fails if it cannot pool to an existing SpdySession and
   // the server does not negotiate HTTP/2 on a new socket.
@@ -536,6 +541,7 @@
       HostPortPair destination,
       GURL origin_url,
       NextProto alternative_protocol,
+      QuicVersion quic_version,
       bool enable_ip_based_pooling,
       NetLog* net_log);
 
diff --git a/net/http/http_stream_factory_impl_job_controller.cc b/net/http/http_stream_factory_impl_job_controller.cc
index 207a9c3..a5815ad 100644
--- a/net/http/http_stream_factory_impl_job_controller.cc
+++ b/net/http/http_stream_factory_impl_job_controller.cc
@@ -805,25 +805,30 @@
   GURL origin_url = ApplyHostMappingRules(request_info_.url, &destination);
 
   // Create an alternative job if alternative service is set up for this domain.
-  alternative_service_ =
-      GetAlternativeServiceInfoFor(request_info_, delegate_, stream_type_)
-          .alternative_service();
+  alternative_service_info_ =
+      GetAlternativeServiceInfoFor(request_info_, delegate_, stream_type_);
+  QuicVersion quic_version = QUIC_VERSION_UNSUPPORTED;
+  if (alternative_service_info_.protocol() == kProtoQUIC) {
+    quic_version =
+        SelectQuicVersion(alternative_service_info_.advertised_versions());
+    DCHECK_NE(quic_version, QUIC_VERSION_UNSUPPORTED);
+  }
 
   if (is_preconnect_) {
     // Due to how the socket pools handle priorities and idle sockets, only IDLE
     // priority currently makes sense for preconnects. The priority for
     // preconnects is currently ignored (see RequestSocketsForPool()), but could
     // be used at some point for proxy resolution or something.
-    if (alternative_service_.protocol != kProtoUnknown) {
+    if (alternative_service_info_.protocol() != kProtoUnknown) {
       HostPortPair alternative_destination(
-          alternative_service_.host_port_pair());
+          alternative_service_info_.host_port_pair());
       ignore_result(
           ApplyHostMappingRules(request_info_.url, &alternative_destination));
       main_job_ = job_factory_->CreateAltSvcJob(
           this, PRECONNECT, session_, request_info_, IDLE, proxy_info_,
           server_ssl_config_, proxy_ssl_config_, alternative_destination,
-          origin_url, alternative_service_.protocol, enable_ip_based_pooling_,
-          session_->net_log());
+          origin_url, alternative_service_info_.protocol(), quic_version,
+          enable_ip_based_pooling_, session_->net_log());
     } else {
       main_job_ = job_factory_->CreateMainJob(
           this, PRECONNECT, session_, request_info_, IDLE, proxy_info_,
@@ -839,23 +844,23 @@
       enable_ip_based_pooling_, net_log_.net_log());
   // Alternative Service can only be set for HTTPS requests while Alternative
   // Proxy is set for HTTP requests.
-  if (alternative_service_.protocol != kProtoUnknown) {
+  if (alternative_service_info_.protocol() != kProtoUnknown) {
     // Never share connection with other jobs for FTP requests.
     DVLOG(1) << "Selected alternative service (host: "
-             << alternative_service_.host_port_pair().host()
-             << " port: " << alternative_service_.host_port_pair().port()
-             << ")";
+             << alternative_service_info_.host_port_pair().host()
+             << " port: " << alternative_service_info_.host_port_pair().port()
+             << " version: " << quic_version << ")";
 
     DCHECK(!request_info_.url.SchemeIs(url::kFtpScheme));
-    HostPortPair alternative_destination(alternative_service_.host_port_pair());
+    HostPortPair alternative_destination(
+        alternative_service_info_.host_port_pair());
     ignore_result(
         ApplyHostMappingRules(request_info_.url, &alternative_destination));
-
     alternative_job_ = job_factory_->CreateAltSvcJob(
         this, ALTERNATIVE, session_, request_info_, priority_, proxy_info_,
         server_ssl_config_, proxy_ssl_config_, alternative_destination,
-        origin_url, alternative_service_.protocol, enable_ip_based_pooling_,
-        net_log_.net_log());
+        origin_url, alternative_service_info_.protocol(), quic_version,
+        enable_ip_based_pooling_, net_log_.net_log());
 
     main_job_is_blocked_ = true;
     alternative_job_->Start(request_->stream_type());
@@ -983,7 +988,7 @@
     int net_error) {
   DCHECK_EQ(alternative_job_->job_type(), ALTERNATIVE);
   DCHECK_NE(OK, net_error);
-  DCHECK_NE(kProtoUnknown, alternative_service_.protocol);
+  DCHECK_NE(kProtoUnknown, alternative_service_info_.protocol());
 
   alternative_job_net_error_ = net_error;
 
@@ -1011,7 +1016,7 @@
 }
 
 void HttpStreamFactoryImpl::JobController::ReportBrokenAlternativeService() {
-  DCHECK(alternative_service_.protocol != kProtoUnknown);
+  DCHECK(alternative_service_info_.protocol() != kProtoUnknown);
   DCHECK_NE(OK, alternative_job_net_error_);
 
   int error_to_report = alternative_job_net_error_;
@@ -1027,7 +1032,7 @@
   HistogramBrokenAlternateProtocolLocation(
       BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_IMPL_JOB_ALT);
   session_->http_server_properties()->MarkAlternativeServiceBroken(
-      alternative_service_);
+      alternative_service_info_.alternative_service());
 }
 
 void HttpStreamFactoryImpl::JobController::MaybeNotifyFactoryOfCompletion() {
@@ -1068,11 +1073,9 @@
   AlternativeServiceInfo alternative_service_info =
       GetAlternativeServiceInfoInternal(request_info, delegate, stream_type);
   AlternativeServiceType type;
-  if (alternative_service_info.alternative_service().protocol ==
-      kProtoUnknown) {
+  if (alternative_service_info.protocol() == kProtoUnknown) {
     type = NO_ALTERNATIVE_SERVICE;
-  } else if (alternative_service_info.alternative_service().protocol ==
-             kProtoQUIC) {
+  } else if (alternative_service_info.protocol() == kProtoQUIC) {
     if (request_info.url.host_piece() ==
         alternative_service_info.alternative_service().host) {
       type = QUIC_SAME_DESTINATION;
@@ -1118,10 +1121,8 @@
 
   for (const AlternativeServiceInfo& alternative_service_info :
        alternative_service_info_vector) {
-    DCHECK(IsAlternateProtocolValid(
-        alternative_service_info.alternative_service().protocol));
-    if (!quic_advertised &&
-        alternative_service_info.alternative_service().protocol == kProtoQUIC)
+    DCHECK(IsAlternateProtocolValid(alternative_service_info.protocol()));
+    if (!quic_advertised && alternative_service_info.protocol() == kProtoQUIC)
       quic_advertised = true;
     if (http_server_properties.IsAlternativeServiceBroken(
             alternative_service_info.alternative_service())) {
@@ -1142,20 +1143,17 @@
          origin.port() < kUnrestrictedPort))
       continue;
 
-    if (alternative_service_info.alternative_service().protocol ==
-        kProtoHTTP2) {
+    if (alternative_service_info.protocol() == kProtoHTTP2) {
       if (!session_->params().enable_http2_alternative_service)
         continue;
 
       // Cache this entry if we don't have a non-broken Alt-Svc yet.
-      if (first_alternative_service_info.alternative_service().protocol ==
-          kProtoUnknown)
+      if (first_alternative_service_info.protocol() == kProtoUnknown)
         first_alternative_service_info = alternative_service_info;
       continue;
     }
 
-    DCHECK_EQ(kProtoQUIC,
-              alternative_service_info.alternative_service().protocol);
+    DCHECK_EQ(kProtoQUIC, alternative_service_info.protocol());
     quic_all_broken = false;
     if (!session_->IsQuicEnabled())
       continue;
@@ -1168,8 +1166,8 @@
     if (!original_url.SchemeIs(url::kHttpsScheme))
       continue;
 
-    // If there is no QUIC version in the advertised versions supported by
-    // the net stack, ignore this entry.
+    // If there is no QUIC version in the advertised versions that is
+    // supported, ignore this entry.
     if (SelectQuicVersion(alternative_service_info.advertised_versions()) ==
         QUIC_VERSION_UNSUPPORTED)
       continue;
@@ -1179,18 +1177,15 @@
     ignore_result(ApplyHostMappingRules(original_url, &mapped_origin));
     QuicServerId server_id(mapped_origin, request_info.privacy_mode);
 
-    HostPortPair destination(
-        alternative_service_info.alternative_service().host_port_pair());
+    HostPortPair destination(alternative_service_info.host_port_pair());
     ignore_result(ApplyHostMappingRules(original_url, &destination));
 
     if (session_->quic_stream_factory()->CanUseExistingSession(server_id,
-                                                               destination)) {
+                                                               destination))
       return alternative_service_info;
-    }
 
     // Cache this entry if we don't have a non-broken Alt-Svc yet.
-    if (first_alternative_service_info.alternative_service().protocol ==
-        kProtoUnknown)
+    if (first_alternative_service_info.protocol() == kProtoUnknown)
       first_alternative_service_info = alternative_service_info;
   }
 
diff --git a/net/http/http_stream_factory_impl_job_controller.h b/net/http/http_stream_factory_impl_job_controller.h
index 71bd77a..32ca2626 100644
--- a/net/http/http_stream_factory_impl_job_controller.h
+++ b/net/http/http_stream_factory_impl_job_controller.h
@@ -340,7 +340,7 @@
   std::unique_ptr<Job> alternative_job_;
   // The alternative service used by |alternative_job_|
   // (or by |main_job_| if |is_preconnect_|.)
-  AlternativeService alternative_service_;
+  AlternativeServiceInfo alternative_service_info_;
 
   // Net error code of the failed alternative job. Set to OK by default.
   int alternative_job_net_error_;
diff --git a/net/http/http_stream_factory_test_util.cc b/net/http/http_stream_factory_test_util.cc
index 4d05c408d..eb45c36dc 100644
--- a/net/http/http_stream_factory_test_util.cc
+++ b/net/http/http_stream_factory_test_util.cc
@@ -27,6 +27,7 @@
     HostPortPair destination,
     GURL origin_url,
     NextProto alternative_protocol,
+    QuicVersion quic_version,
     const ProxyServer& alternative_proxy_server,
     bool enable_ip_based_pooling,
     NetLog* net_log)
@@ -41,6 +42,7 @@
                                  destination,
                                  origin_url,
                                  alternative_protocol,
+                                 quic_version,
                                  alternative_proxy_server,
                                  enable_ip_based_pooling,
                                  net_log) {
@@ -75,7 +77,8 @@
   auto main_job = base::MakeUnique<MockHttpStreamFactoryImplJob>(
       delegate, job_type, session, request_info, priority, proxy_info,
       SSLConfig(), SSLConfig(), destination, origin_url, kProtoUnknown,
-      ProxyServer(), enable_ip_based_pooling, net_log);
+      QUIC_VERSION_UNSUPPORTED, ProxyServer(), enable_ip_based_pooling,
+      net_log);
 
   // Keep raw pointer to Job but pass ownership.
   main_job_ = main_job.get();
@@ -95,12 +98,13 @@
     HostPortPair destination,
     GURL origin_url,
     NextProto alternative_protocol,
+    QuicVersion quic_version,
     bool enable_ip_based_pooling,
     NetLog* net_log) {
   auto alternative_job = base::MakeUnique<MockHttpStreamFactoryImplJob>(
       delegate, job_type, session, request_info, priority, proxy_info,
       SSLConfig(), SSLConfig(), destination, origin_url, alternative_protocol,
-      ProxyServer(), enable_ip_based_pooling, net_log);
+      quic_version, ProxyServer(), enable_ip_based_pooling, net_log);
 
   // Keep raw pointer to Job but pass ownership.
   alternative_job_ = alternative_job.get();
@@ -125,7 +129,8 @@
   auto alternative_job = base::MakeUnique<MockHttpStreamFactoryImplJob>(
       delegate, job_type, session, request_info, priority, proxy_info,
       SSLConfig(), SSLConfig(), destination, origin_url, kProtoUnknown,
-      alternative_proxy_server, enable_ip_based_pooling, net_log);
+      QUIC_VERSION_UNSUPPORTED, alternative_proxy_server,
+      enable_ip_based_pooling, net_log);
 
   // Keep raw pointer to Job but pass ownership.
   alternative_job_ = alternative_job.get();
diff --git a/net/http/http_stream_factory_test_util.h b/net/http/http_stream_factory_test_util.h
index 49a3d96..9a84dcc 100644
--- a/net/http/http_stream_factory_test_util.h
+++ b/net/http/http_stream_factory_test_util.h
@@ -116,6 +116,7 @@
                                HostPortPair destination,
                                GURL origin_url,
                                NextProto alternative_protocol,
+                               QuicVersion quic_version,
                                const ProxyServer& alternative_proxy_server,
                                bool enable_ip_based_pooling,
                                NetLog* net_log);
@@ -159,6 +160,7 @@
       HostPortPair destination,
       GURL origin_url,
       NextProto alternative_protocol,
+      QuicVersion quic_version,
       bool enable_ip_based_pooling,
       NetLog* net_log) override;
 
diff --git a/net/quic/chromium/quic_network_transaction_unittest.cc b/net/quic/chromium/quic_network_transaction_unittest.cc
index 2d62f45e..3528a1c 100644
--- a/net/quic/chromium/quic_network_transaction_unittest.cc
+++ b/net/quic/chromium/quic_network_transaction_unittest.cc
@@ -1452,6 +1452,123 @@
   SendRequestAndExpectQuicResponse("hello!");
 }
 
+TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceWithVersionForQuic1) {
+  // Both server advertises and client supports two QUIC versions.
+  // Only |version_| is advertised and supported.
+  // The QuicStreamFactoy will pick up |version_|, which is verified as the
+  // PacketMakers are using |version_|.
+
+  // Add support for another QUIC version besides |version_| on the client side.
+  // Also find a different version advertised by the server.
+  QuicVersion advertised_version_2 = QUIC_VERSION_UNSUPPORTED;
+  for (const QuicVersion& version : AllSupportedVersions()) {
+    if (version == version_)
+      continue;
+    if (supported_versions_.size() != 2) {
+      supported_versions_.push_back(version);
+      continue;
+    }
+    advertised_version_2 = version;
+    break;
+  }
+  DCHECK_NE(advertised_version_2, QUIC_VERSION_UNSUPPORTED);
+
+  std::string QuicAltSvcWithVersionHeader =
+      base::StringPrintf("Alt-Svc: quic=\":443\";v=\"%d,%d\"\r\n\r\n",
+                         advertised_version_2, version_);
+
+  MockRead http_reads[] = {
+      MockRead("HTTP/1.1 200 OK\r\n"),
+      MockRead(QuicAltSvcWithVersionHeader.c_str()), MockRead("hello world"),
+      MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
+      MockRead(ASYNC, OK)};
+
+  StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
+                                     0);
+  socket_factory_.AddSocketDataProvider(&http_data);
+  socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
+
+  MockQuicData mock_quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  mock_quic_data.AddWrite(
+      ConstructInitialSettingsPacket(1, &header_stream_offset));
+  mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket(
+      2, GetNthClientInitiatedStreamId(0), true, true,
+      GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
+  mock_quic_data.AddRead(ConstructServerResponseHeadersPacket(
+      1, GetNthClientInitiatedStreamId(0), false, false,
+      GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(ConstructServerDataPacket(
+      2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!"));
+  mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1));
+  mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
+  mock_quic_data.AddRead(ASYNC, 0);               // EOF
+
+  mock_quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  AddHangingNonAlternateProtocolSocketData();
+  CreateSession(supported_versions_);
+
+  SendRequestAndExpectHttpResponse("hello world");
+  SendRequestAndExpectQuicResponse("hello!");
+}
+
+TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceWithVersionForQuic2) {
+  // Client and server mutually support more than one QUIC_VERSION.
+  // The QuicStreamFactoy will pick the preferred QUIC_VERSION: |version_|,
+  // which is verified as the PacketMakers are using |version_|.
+
+  QuicVersion common_version_2 = QUIC_VERSION_UNSUPPORTED;
+  for (const QuicVersion& version : AllSupportedVersions()) {
+    if (version == version_)
+      continue;
+    common_version_2 = version;
+    break;
+  }
+  DCHECK_NE(common_version_2, QUIC_VERSION_UNSUPPORTED);
+
+  supported_versions_.push_back(
+      common_version_2);  // Supported but unpreferred.
+
+  std::string QuicAltSvcWithVersionHeader = base::StringPrintf(
+      "Alt-Svc: quic=\":443\";v=\"%d,%d\"\r\n\r\n", common_version_2, version_);
+
+  MockRead http_reads[] = {
+      MockRead("HTTP/1.1 200 OK\r\n"),
+      MockRead(QuicAltSvcWithVersionHeader.c_str()), MockRead("hello world"),
+      MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
+      MockRead(ASYNC, OK)};
+
+  StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
+                                     0);
+  socket_factory_.AddSocketDataProvider(&http_data);
+  socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
+
+  MockQuicData mock_quic_data;
+  QuicStreamOffset header_stream_offset = 0;
+  mock_quic_data.AddWrite(
+      ConstructInitialSettingsPacket(1, &header_stream_offset));
+  mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket(
+      2, GetNthClientInitiatedStreamId(0), true, true,
+      GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
+  mock_quic_data.AddRead(ConstructServerResponseHeadersPacket(
+      1, GetNthClientInitiatedStreamId(0), false, false,
+      GetResponseHeaders("200 OK")));
+  mock_quic_data.AddRead(ConstructServerDataPacket(
+      2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!"));
+  mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1));
+  mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING);  // No more data to read
+  mock_quic_data.AddRead(ASYNC, 0);               // EOF
+
+  mock_quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  AddHangingNonAlternateProtocolSocketData();
+  CreateSession(supported_versions_);
+
+  SendRequestAndExpectHttpResponse("hello world");
+  SendRequestAndExpectQuicResponse("hello!");
+}
+
 TEST_P(QuicNetworkTransactionTest,
        UseAlternativeServiceWithProbabilityForQuic) {
   MockRead http_reads[] = {
diff --git a/net/quic/chromium/quic_stream_factory.cc b/net/quic/chromium/quic_stream_factory.cc
index 5665ce49..00787a41 100644
--- a/net/quic/chromium/quic_stream_factory.cc
+++ b/net/quic/chromium/quic_stream_factory.cc
@@ -326,6 +326,7 @@
 class QuicStreamFactory::Job {
  public:
   Job(QuicStreamFactory* factory,
+      const QuicVersion& quic_version,
       HostResolver* host_resolver,
       const QuicSessionKey& key,
       bool was_alternative_service_recently_broken,
@@ -366,6 +367,7 @@
   IoState io_state_;
 
   QuicStreamFactory* factory_;
+  QuicVersion quic_version_;
   HostResolver* host_resolver_;
   std::unique_ptr<HostResolver::Request> request_;
   const QuicSessionKey key_;
@@ -383,6 +385,7 @@
 };
 
 QuicStreamFactory::Job::Job(QuicStreamFactory* factory,
+                            const QuicVersion& quic_version,
                             HostResolver* host_resolver,
                             const QuicSessionKey& key,
                             bool was_alternative_service_recently_broken,
@@ -390,6 +393,7 @@
                             const NetLogWithSource& net_log)
     : io_state_(STATE_RESOLVE_HOST),
       factory_(factory),
+      quic_version_(quic_version),
       host_resolver_(host_resolver),
       key_(key),
       cert_verify_flags_(cert_verify_flags),
@@ -508,10 +512,11 @@
       NetLogEventType::QUIC_STREAM_FACTORY_JOB_CONNECT,
       NetLog::BoolCallback("require_confirmation", require_confirmation));
 
-  int rv =
-      factory_->CreateSession(key_, cert_verify_flags_, require_confirmation,
-                              address_list_, dns_resolution_start_time_,
-                              dns_resolution_end_time_, net_log_, &session_);
+  DCHECK_NE(quic_version_, QUIC_VERSION_UNSUPPORTED);
+  int rv = factory_->CreateSession(
+      key_, quic_version_, cert_verify_flags_, require_confirmation,
+      address_list_, dns_resolution_start_time_, dns_resolution_end_time_,
+      net_log_, &session_);
   if (rv != OK) {
     DCHECK(rv != ERR_IO_PENDING);
     DCHECK(!session_);
@@ -581,18 +586,20 @@
 }
 
 int QuicStreamRequest::Request(const HostPortPair& destination,
+                               QuicVersion quic_version,
                                PrivacyMode privacy_mode,
                                int cert_verify_flags,
                                const GURL& url,
                                QuicStringPiece method,
                                const NetLogWithSource& net_log,
                                const CompletionCallback& callback) {
+  DCHECK_NE(quic_version, QUIC_VERSION_UNSUPPORTED);
   DCHECK(callback_.is_null());
   DCHECK(factory_);
   server_id_ = QuicServerId(HostPortPair::FromURL(url), privacy_mode);
 
-  int rv = factory_->Create(server_id_, destination, cert_verify_flags, url,
-                            method, net_log, this);
+  int rv = factory_->Create(server_id_, destination, quic_version,
+                            cert_verify_flags, url, method, net_log, this);
   if (rv == ERR_IO_PENDING) {
     net_log_ = net_log;
     callback_ = callback;
@@ -652,7 +659,6 @@
     QuicClock* clock,
     size_t max_packet_length,
     const std::string& user_agent_id,
-    const QuicVersionVector& supported_versions,
     bool store_server_configs_in_properties,
     bool close_sessions_on_ip_change,
     bool mark_quic_broken_when_network_blackholes,
@@ -689,7 +695,6 @@
                                     ct_policy_enforcer,
                                     transport_security_state,
                                     cert_transparency_verifier))),
-      supported_versions_(supported_versions),
       mark_quic_broken_when_network_blackholes_(
           mark_quic_broken_when_network_blackholes),
       store_server_configs_in_properties_(store_server_configs_in_properties),
@@ -849,6 +854,7 @@
 
 int QuicStreamFactory::Create(const QuicServerId& server_id,
                               const HostPortPair& destination,
+                              QuicVersion quic_version,
                               int cert_verify_flags,
                               const GURL& url,
                               QuicStringPiece method,
@@ -927,7 +933,7 @@
 
   QuicSessionKey key(destination, server_id);
   std::unique_ptr<Job> job = base::MakeUnique<Job>(
-      this, host_resolver_, key, WasQuicRecentlyBroken(server_id),
+      this, quic_version, host_resolver_, key, WasQuicRecentlyBroken(server_id),
       cert_verify_flags, net_log);
   int rv = job->Run(base::Bind(&QuicStreamFactory::OnJobComplete,
                                base::Unretained(this), job.get()));
@@ -1458,15 +1464,15 @@
   return OK;
 }
 
-int QuicStreamFactory::CreateSession(
-    const QuicSessionKey& key,
-    int cert_verify_flags,
-    bool require_confirmation,
-    const AddressList& address_list,
-    base::TimeTicks dns_resolution_start_time,
-    base::TimeTicks dns_resolution_end_time,
-    const NetLogWithSource& net_log,
-    QuicChromiumClientSession** session) {
+int QuicStreamFactory::CreateSession(const QuicSessionKey& key,
+                                     const QuicVersion& quic_version,
+                                     int cert_verify_flags,
+                                     bool require_confirmation,
+                                     const AddressList& address_list,
+                                     base::TimeTicks dns_resolution_start_time,
+                                     base::TimeTicks dns_resolution_end_time,
+                                     const NetLogWithSource& net_log,
+                                     QuicChromiumClientSession** session) {
   TRACE_EVENT0(kNetTracingCategory, "QuicStreamFactory::CreateSession");
   IPEndPoint addr = *address_list.begin();
   const QuicServerId& server_id = key.server_id();
@@ -1502,7 +1508,7 @@
   QuicConnection* connection = new QuicConnection(
       connection_id, QuicSocketAddress(QuicSocketAddressImpl(addr)),
       helper_.get(), alarm_factory_.get(), writer, true /* owns_writer */,
-      Perspective::IS_CLIENT, supported_versions_);
+      Perspective::IS_CLIENT, {quic_version});
   connection->set_ping_timeout(ping_timeout_);
   connection->SetMaxPacketLength(max_packet_length_);
 
diff --git a/net/quic/chromium/quic_stream_factory.h b/net/quic/chromium/quic_stream_factory.h
index 3942735..81b7841 100644
--- a/net/quic/chromium/quic_stream_factory.h
+++ b/net/quic/chromium/quic_stream_factory.h
@@ -115,6 +115,7 @@
   // |destination| will be resolved and resulting IPEndPoint used to open a
   // QuicConnection.  This can be different than HostPortPair::FromURL(url).
   int Request(const HostPortPair& destination,
+              QuicVersion quic_version,
               PrivacyMode privacy_mode,
               int cert_verify_flags,
               const GURL& url,
@@ -202,7 +203,6 @@
       QuicClock* clock,
       size_t max_packet_length,
       const std::string& user_agent_id,
-      const QuicVersionVector& supported_versions,
       bool store_server_configs_in_properties,
       bool close_sessions_on_ip_change,
       bool mark_quic_broken_when_network_blackholes,
@@ -233,6 +233,7 @@
   // OnRequestComplete asynchronously.
   int Create(const QuicServerId& server_id,
              const HostPortPair& destination,
+             QuicVersion quic_version,
              int cert_verify_flags,
              const GURL& url,
              QuicStringPiece method,
@@ -404,6 +405,7 @@
   bool HasActiveJob(const QuicServerId& server_id) const;
   bool HasActiveCertVerifierJob(const QuicServerId& server_id) const;
   int CreateSession(const QuicSessionKey& key,
+                    const QuicVersion& quic_version,
                     int cert_verify_flags,
                     bool require_confirmation,
                     const AddressList& address_list,
@@ -515,8 +517,6 @@
   // Map of QuicServerId to owning CertVerifierJob.
   CertVerifierJobMap active_cert_verifier_jobs_;
 
-  const QuicVersionVector supported_versions_;
-
   // True if QUIC should be marked as broken when a connection blackholes after
   // the handshake is confirmed.
   bool mark_quic_broken_when_network_blackholes_;
diff --git a/net/quic/chromium/quic_stream_factory_test.cc b/net/quic/chromium/quic_stream_factory_test.cc
index d97c7ce..d9f1d77 100644
--- a/net/quic/chromium/quic_stream_factory_test.cc
+++ b/net/quic/chromium/quic_stream_factory_test.cc
@@ -216,8 +216,8 @@
         &transport_security_state_, cert_transparency_verifier_.get(),
         /*SocketPerformanceWatcherFactory*/ nullptr,
         &crypto_client_stream_factory_, &random_generator_, &clock_,
-        kDefaultMaxPacketSize, string(), SupportedVersions(version_),
-        store_server_configs_in_properties_, close_sessions_on_ip_change_,
+        kDefaultMaxPacketSize, string(), store_server_configs_in_properties_,
+        close_sessions_on_ip_change_,
         /*mark_quic_broken_when_network_blackholes*/ false,
         idle_connection_timeout_seconds_, reduced_ping_timeout_seconds_,
         packet_reader_yield_after_duration_milliseconds_,
@@ -285,7 +285,7 @@
     QuicStreamRequest request(factory_.get());
     GURL url("https://" + destination.host() + "/");
     EXPECT_EQ(ERR_IO_PENDING,
-              request.Request(destination, privacy_mode_,
+              request.Request(destination, version_, privacy_mode_,
                               /*cert_verify_flags=*/0, url, "GET", net_log_,
                               callback_.callback()));
 
@@ -430,7 +430,7 @@
     // Create request and QuicHttpStream.
     QuicStreamRequest request(factory_.get());
     EXPECT_EQ(ERR_IO_PENDING,
-              request.Request(host_port_pair_, privacy_mode_,
+              request.Request(host_port_pair_, version_, privacy_mode_,
                               /*cert_verify_flags=*/0, url_, "GET", net_log_,
                               callback_.callback()));
     EXPECT_EQ(OK, callback_.WaitForResult());
@@ -610,9 +610,9 @@
 
     QuicStreamRequest request(factory_.get());
     EXPECT_EQ(ERR_IO_PENDING,
-              request.Request(quic_server_id.host_port_pair(), privacy_mode_,
-                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
-                              callback_.callback()));
+              request.Request(quic_server_id.host_port_pair(), version_,
+                              privacy_mode_, /*cert_verify_flags=*/0, url_,
+                              "GET", net_log_, callback_.callback()));
     EXPECT_THAT(callback_.WaitForResult(), IsOk());
 
     EXPECT_FALSE(QuicStreamFactoryPeer::CryptoConfigCacheIsEmpty(
@@ -643,10 +643,10 @@
 
     QuicStreamRequest request2(factory_.get());
     EXPECT_EQ(ERR_IO_PENDING,
-              request2.Request(quic_server_id2.host_port_pair(), privacy_mode_,
-                               /*cert_verify_flags=*/0,
-                               GURL("https://mail.example.org/"), "GET",
-                               net_log_, callback_.callback()));
+              request2.Request(
+                  quic_server_id2.host_port_pair(), version_, privacy_mode_,
+                  /*cert_verify_flags=*/0, GURL("https://mail.example.org/"),
+                  "GET", net_log_, callback_.callback()));
     EXPECT_THAT(callback_.WaitForResult(), IsOk());
 
     EXPECT_FALSE(QuicStreamFactoryPeer::CryptoConfigCacheIsEmpty(
@@ -760,7 +760,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -769,7 +769,7 @@
   EXPECT_TRUE(stream.get());
 
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK, request2.Request(host_port_pair_, privacy_mode_,
+  EXPECT_EQ(OK, request2.Request(host_port_pair_, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                  callback_.callback()));
   // Will reset stream 3.
@@ -780,7 +780,7 @@
   // TODO(rtenneti): We should probably have a tests that HTTP and HTTPS result
   // in streams on different sessions.
   QuicStreamRequest request3(factory_.get());
-  EXPECT_EQ(OK, request3.Request(host_port_pair_, privacy_mode_,
+  EXPECT_EQ(OK, request3.Request(host_port_pair_, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                  callback_.callback()));
   stream = request3.CreateStream();   // Will reset stream 5.
@@ -806,7 +806,7 @@
                                            "192.168.0.1", "");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_,
+  EXPECT_EQ(OK, request.Request(host_port_pair_, version_, privacy_mode_,
                                 /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                 callback_.callback()));
 
@@ -832,7 +832,7 @@
                                            "192.168.0.1", "");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_,
+  EXPECT_EQ(OK, request.Request(host_port_pair_, version_, privacy_mode_,
                                 /*cert_verify_flags=*/0, url_, "POST", net_log_,
                                 callback_.callback()));
 
@@ -854,7 +854,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -885,7 +885,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -916,7 +916,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -947,7 +947,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -973,7 +973,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -1003,7 +1003,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -1047,7 +1047,7 @@
   host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", "");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_,
+  EXPECT_EQ(OK, request.Request(host_port_pair_, version_, privacy_mode_,
                                 /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                 callback_.callback()));
   std::unique_ptr<HttpStream> stream = request.CreateStream();
@@ -1055,7 +1055,7 @@
 
   TestCompletionCallback callback;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK, request2.Request(server2, privacy_mode_,
+  EXPECT_EQ(OK, request2.Request(server2, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url2_, "GET",
                                  net_log_, callback.callback()));
   std::unique_ptr<HttpStream> stream2 = request2.CreateStream();
@@ -1105,7 +1105,7 @@
   TestCompletionCallback callback;
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(server2, privacy_mode_,
+            request2.Request(server2, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url2_, "GET", net_log_,
                              callback.callback()));
   EXPECT_EQ(OK, callback.WaitForResult());
@@ -1139,7 +1139,7 @@
   host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", "");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_,
+  EXPECT_EQ(OK, request.Request(host_port_pair_, version_, privacy_mode_,
                                 /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                 callback_.callback()));
   std::unique_ptr<HttpStream> stream = request.CreateStream();
@@ -1147,7 +1147,7 @@
 
   TestCompletionCallback callback;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK, request2.Request(server2, privacy_mode_,
+  EXPECT_EQ(OK, request2.Request(server2, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url2_, "GET",
                                  net_log_, callback.callback()));
   std::unique_ptr<HttpStream> stream2 = request2.CreateStream();
@@ -1159,7 +1159,7 @@
 
   TestCompletionCallback callback3;
   QuicStreamRequest request3(factory_.get());
-  EXPECT_EQ(OK, request3.Request(server2, privacy_mode_,
+  EXPECT_EQ(OK, request3.Request(server2, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url2_, "GET",
                                  net_log_, callback3.callback()));
   std::unique_ptr<HttpStream> stream3 = request3.CreateStream();
@@ -1192,7 +1192,7 @@
   host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", "");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK, request.Request(server1, privacy_mode_,
+  EXPECT_EQ(OK, request.Request(server1, version_, privacy_mode_,
                                 /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                 callback_.callback()));
   std::unique_ptr<HttpStream> stream = request.CreateStream();
@@ -1200,7 +1200,7 @@
 
   TestCompletionCallback callback;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK, request2.Request(server2, privacy_mode_,
+  EXPECT_EQ(OK, request2.Request(server2, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url2_, "GET",
                                  net_log_, callback_.callback()));
   std::unique_ptr<HttpStream> stream2 = request2.CreateStream();
@@ -1236,7 +1236,7 @@
   host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", "");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK, request.Request(server1, privacy_mode_,
+  EXPECT_EQ(OK, request.Request(server1, version_, privacy_mode_,
                                 /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                 callback_.callback()));
   std::unique_ptr<HttpStream> stream = request.CreateStream();
@@ -1244,7 +1244,7 @@
 
   TestCompletionCallback callback;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK, request2.Request(server2, privacy_mode_,
+  EXPECT_EQ(OK, request2.Request(server2, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url2_, "GET",
                                  net_log_, callback_.callback()));
   std::unique_ptr<HttpStream> stream2 = request2.CreateStream();
@@ -1291,7 +1291,7 @@
   host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", "");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK, request.Request(server1, privacy_mode_,
+  EXPECT_EQ(OK, request.Request(server1, version_, privacy_mode_,
                                 /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                 callback_.callback()));
   std::unique_ptr<HttpStream> stream = request.CreateStream();
@@ -1299,7 +1299,7 @@
 
   TestCompletionCallback callback;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK, request2.Request(server2, privacy_mode_,
+  EXPECT_EQ(OK, request2.Request(server2, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url2_, "GET",
                                  net_log_, callback_.callback()));
   std::unique_ptr<HttpStream> stream2 = request2.CreateStream();
@@ -1330,7 +1330,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -1350,7 +1350,7 @@
   // new session is created.
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -1392,7 +1392,7 @@
   // kDefaultMaxStreamsPerConnection / 2.
   for (size_t i = 0; i < kDefaultMaxStreamsPerConnection / 2; i++) {
     QuicStreamRequest request(factory_.get());
-    int rv = request.Request(host_port_pair_, privacy_mode_,
+    int rv = request.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback());
     if (i == 0) {
@@ -1409,7 +1409,7 @@
   }
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_,
+  EXPECT_EQ(OK, request.Request(host_port_pair_, version_, privacy_mode_,
                                 /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                 CompletionCallback()));
   std::unique_ptr<HttpStream> stream = request.CreateStream();
@@ -1444,7 +1444,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -1463,7 +1463,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -1482,7 +1482,7 @@
   {
     QuicStreamRequest request(factory_.get());
     EXPECT_EQ(ERR_IO_PENDING,
-              request.Request(host_port_pair_, privacy_mode_,
+              request.Request(host_port_pair_, version_, privacy_mode_,
                               /*cert_verify_flags=*/0, url_, "GET", net_log_,
                               callback_.callback()));
   }
@@ -1490,7 +1490,7 @@
   base::RunLoop().RunUntilIdle();
 
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK, request2.Request(host_port_pair_, privacy_mode_,
+  EXPECT_EQ(OK, request2.Request(host_port_pair_, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                  callback_.callback()));
   std::unique_ptr<HttpStream> stream = request2.CreateStream();
@@ -1521,7 +1521,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -1541,7 +1541,7 @@
 
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
 
@@ -1575,7 +1575,7 @@
   // Create request, should fail after the write of the CHLO fails.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_EQ(ERR_QUIC_HANDSHAKE_FAILED, callback_.WaitForResult());
@@ -1594,7 +1594,7 @@
 
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
   EXPECT_FALSE(HasActiveSession(host_port_pair_));
@@ -1637,7 +1637,7 @@
   // Create request, should fail immediately.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_QUIC_HANDSHAKE_FAILED,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   // Check no active session, or active jobs left for this server.
@@ -1656,7 +1656,7 @@
 
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
   EXPECT_FALSE(HasActiveSession(host_port_pair_));
@@ -1699,7 +1699,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -1720,7 +1720,7 @@
 
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
 
@@ -1767,7 +1767,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -1834,7 +1834,7 @@
 
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -1897,7 +1897,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -1959,7 +1959,7 @@
 
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2007,7 +2007,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2065,7 +2065,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2114,7 +2114,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2166,7 +2166,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2214,7 +2214,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2262,7 +2262,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2300,7 +2300,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2342,7 +2342,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2418,7 +2418,7 @@
   socket_data2.AddSocketDataToFactory(&socket_factory_);
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2466,7 +2466,7 @@
 
   // Create request and QuicHttpStream to create session1.
   QuicStreamRequest request1(factory_.get());
-  EXPECT_EQ(OK, request1.Request(server1, privacy_mode_,
+  EXPECT_EQ(OK, request1.Request(server1, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                  callback_.callback()));
   std::unique_ptr<HttpStream> stream1 = request1.CreateStream();
@@ -2474,7 +2474,7 @@
 
   // Create request and QuicHttpStream to create session2.
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK, request2.Request(server2, privacy_mode_,
+  EXPECT_EQ(OK, request2.Request(server2, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url2_, "GET",
                                  net_log_, callback_.callback()));
   std::unique_ptr<HttpStream> stream2 = request2.CreateStream();
@@ -2559,7 +2559,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2623,7 +2623,7 @@
 
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2684,7 +2684,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2750,7 +2750,7 @@
 
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2803,7 +2803,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2855,7 +2855,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2907,7 +2907,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -2965,7 +2965,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
@@ -3054,7 +3054,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
@@ -3143,7 +3143,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
@@ -3207,7 +3207,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
@@ -3286,7 +3286,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
@@ -3366,7 +3366,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
@@ -3464,7 +3464,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
@@ -3563,7 +3563,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
@@ -3644,7 +3644,7 @@
 
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -3696,7 +3696,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
@@ -3785,7 +3785,7 @@
 
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -3850,7 +3850,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -3913,7 +3913,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
@@ -4055,7 +4055,7 @@
   // Create request and QuicHttpStream.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
@@ -4109,7 +4109,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -4129,7 +4129,7 @@
 
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
 
@@ -4162,7 +4162,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -4183,7 +4183,7 @@
 
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, privacy_mode_,
+            request2.Request(host_port_pair_, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
 
@@ -4287,7 +4287,7 @@
                                            "192.168.0.1", "");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_,
+  EXPECT_EQ(OK, request.Request(host_port_pair_, version_, privacy_mode_,
                                 /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                 callback_.callback()));
 
@@ -4334,7 +4334,7 @@
   EXPECT_EQ(QuicTime::Delta::FromSeconds(kPingTimeoutSecs),
             QuicStreamFactoryPeer::GetPingTimeout(factory_.get()));
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_,
+  EXPECT_EQ(OK, request.Request(host_port_pair_, version_, privacy_mode_,
                                 /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                 callback_.callback()));
 
@@ -4366,7 +4366,7 @@
   DVLOG(1) << "Create 2nd session and timeout with open stream";
   TestCompletionCallback callback2;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK, request2.Request(server2, privacy_mode_,
+  EXPECT_EQ(OK, request2.Request(server2, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url2_, "GET",
                                  net_log_, callback2.callback()));
   QuicChromiumClientSession* session2 = GetActiveSession(server2);
@@ -4432,7 +4432,7 @@
   // Start a QUIC request.
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -4477,7 +4477,7 @@
                                        "StartReading");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_,
+  EXPECT_EQ(OK, request.Request(host_port_pair_, version_, privacy_mode_,
                                 /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                 callback_.callback()));
 
@@ -4522,7 +4522,7 @@
                                        "StartReading");
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_,
+  EXPECT_EQ(OK, request.Request(host_port_pair_, version_, privacy_mode_,
                                 /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                 callback_.callback()));
 
@@ -4554,7 +4554,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -4574,7 +4574,7 @@
         ->promised_by_url())[kDefaultUrl] = &promised;
 
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK, request2.Request(host_port_pair_, privacy_mode_,
+  EXPECT_EQ(OK, request2.Request(host_port_pair_, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                  callback_.callback()));
 
@@ -4601,7 +4601,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -4627,7 +4627,7 @@
   // cancel it because the privacy modes do not match.
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(host_port_pair_, PRIVACY_MODE_ENABLED,
+            request2.Request(host_port_pair_, version_, PRIVACY_MODE_ENABLED,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
 
@@ -4662,7 +4662,7 @@
 
   QuicStreamRequest request1(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request1.Request(destination1, privacy_mode_,
+            request1.Request(destination1, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url_, "GET", net_log_,
                              callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -4673,7 +4673,7 @@
   // Second request returns synchronously because it pools to existing session.
   TestCompletionCallback callback2;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK, request2.Request(destination2, privacy_mode_,
+  EXPECT_EQ(OK, request2.Request(destination2, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url_, "GET", net_log_,
                                  callback2.callback()));
   std::unique_ptr<HttpStream> stream2 = request2.CreateStream();
@@ -4705,7 +4705,7 @@
 
   QuicStreamRequest request(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request.Request(host_port_pair_, privacy_mode_,
+            request.Request(host_port_pair_, version_, privacy_mode_,
                             /*cert_verify_flags=*/0, url_, "GET", net_log_,
                             callback_.callback()));
 
@@ -4801,9 +4801,10 @@
   AddHangingSocketData();
 
   QuicStreamRequest request(factory_.get());
-  EXPECT_EQ(ERR_IO_PENDING, request.Request(destination, privacy_mode_,
-                                            /*cert_verify_flags=*/0, url, "GET",
-                                            net_log_, callback_.callback()));
+  EXPECT_EQ(ERR_IO_PENDING,
+            request.Request(destination, version_, privacy_mode_,
+                            /*cert_verify_flags=*/0, url, "GET", net_log_,
+                            callback_.callback()));
 
   EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_QUIC_HANDSHAKE_FAILED));
 
@@ -4844,7 +4845,7 @@
 
   QuicStreamRequest request1(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request1.Request(destination, privacy_mode_,
+            request1.Request(destination, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url1, "GET", net_log_,
                              callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -4856,7 +4857,7 @@
   // Second request returns synchronously because it pools to existing session.
   TestCompletionCallback callback2;
   QuicStreamRequest request2(factory_.get());
-  EXPECT_EQ(OK, request2.Request(destination, privacy_mode_,
+  EXPECT_EQ(OK, request2.Request(destination, version_, privacy_mode_,
                                  /*cert_verify_flags=*/0, url2, "GET", net_log_,
                                  callback2.callback()));
   std::unique_ptr<HttpStream> stream2 = request2.CreateStream();
@@ -4916,7 +4917,7 @@
 
   QuicStreamRequest request1(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request1.Request(destination, PRIVACY_MODE_DISABLED,
+            request1.Request(destination, version_, PRIVACY_MODE_DISABLED,
                              /*cert_verify_flags=*/0, url1, "GET", net_log_,
                              callback_.callback()));
   EXPECT_EQ(OK, callback_.WaitForResult());
@@ -4927,7 +4928,7 @@
   TestCompletionCallback callback2;
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(destination, PRIVACY_MODE_ENABLED,
+            request2.Request(destination, version_, PRIVACY_MODE_ENABLED,
                              /*cert_verify_flags=*/0, url2, "GET", net_log_,
                              callback2.callback()));
   EXPECT_EQ(OK, callback2.WaitForResult());
@@ -4999,7 +5000,7 @@
 
   QuicStreamRequest request1(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request1.Request(destination, privacy_mode_,
+            request1.Request(destination, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url1, "GET", net_log_,
                              callback_.callback()));
   EXPECT_THAT(callback_.WaitForResult(), IsOk());
@@ -5010,7 +5011,7 @@
   TestCompletionCallback callback2;
   QuicStreamRequest request2(factory_.get());
   EXPECT_EQ(ERR_IO_PENDING,
-            request2.Request(destination, privacy_mode_,
+            request2.Request(destination, version_, privacy_mode_,
                              /*cert_verify_flags=*/0, url2, "GET", net_log_,
                              callback2.callback()));
   EXPECT_THAT(callback2.WaitForResult(), IsOk());
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
index c4f8d644..f71ef7ce 100644
--- a/pdf/pdfium/pdfium_engine.cc
+++ b/pdf/pdfium/pdfium_engine.cc
@@ -682,6 +682,8 @@
       selecting_(false),
       mouse_down_state_(PDFiumPage::NONSELECTABLE_AREA,
                         PDFiumPage::LinkTarget()),
+      in_form_text_area_(false),
+      mouse_left_button_down_(false),
       next_page_to_search_(-1),
       last_page_to_search_(-1),
       last_character_index_to_search_(-1),
@@ -1635,10 +1637,10 @@
   unsigned long form_sel_text_len =
       FORM_GetSelectedText(form_handle, page, nullptr, 0);
 
-  // Check to see if there is selected text in the form. When
-  // |form_sel_text_len| is 2, that represents a wide string with just a
-  // NUL-terminator.
-  if (form_sel_text_len <= 2)
+  // If form selected text is empty and there was no previous form text
+  // selection, exit early because nothing has changed. When |form_sel_text_len|
+  // is 2, that represents a wide string with just a NUL-terminator.
+  if (form_sel_text_len <= 2 && selected_form_text_.empty())
     return;
 
   base::string16 selected_form_text16;
@@ -1647,10 +1649,12 @@
   string_adapter.Close(FORM_GetSelectedText(
       form_handle, page, string_adapter.GetData(), form_sel_text_len));
 
-  std::string selected_form_text = base::UTF16ToUTF8(selected_form_text16);
-  if (!selected_form_text.empty()) {
-    pp::PDF::SetSelectedText(GetPluginInstance(), selected_form_text.c_str());
-  }
+  // Update previous and current selections, then compare them to check if
+  // selection has changed. If so, set plugin text selection.
+  std::string selected_form_text = selected_form_text_;
+  selected_form_text_ = base::UTF16ToUTF8(selected_form_text16);
+  if (selected_form_text != selected_form_text_)
+    pp::PDF::SetSelectedText(GetPluginInstance(), selected_form_text_.c_str());
 }
 
 void PDFiumEngine::PrintEnd() {
@@ -1719,6 +1723,8 @@
     return false;
   }
 
+  SetMouseLeftButtonDown(event.GetButton() == PP_INPUTEVENT_MOUSEBUTTON_LEFT);
+
   SelectionChangeInvalidator selection_invalidator(this);
   selection_.clear();
 
@@ -1814,6 +1820,9 @@
     return false;
   }
 
+  if (event.GetButton() == PP_INPUTEVENT_MOUSEBUTTON_LEFT)
+    SetMouseLeftButtonDown(false);
+
   int page_index = -1;
   int char_index = -1;
   int form_type = FPDF_FORMFIELD_UNKNOWN;
@@ -1857,9 +1866,6 @@
     FORM_OnLButtonUp(form_, pages_[page_index]->GetPage(), 0, page_x, page_y);
   }
 
-  if (area == PDFiumPage::FORM_TEXT_AREA && last_page_mouse_down_ != -1)
-    SetFormSelectedText(form_, pages_[last_page_mouse_down_]->GetPage());
-
   if (!selecting_)
     return false;
 
@@ -1924,6 +1930,14 @@
       link_under_cursor_ = url;
       pp::PDF::SetLinkUnderCursor(GetPluginInstance(), url.c_str());
     }
+
+    // If in form text area while left mouse button is held down, check if form
+    // text selection needs to be updated.
+    if (mouse_left_button_down_ && area == PDFiumPage::FORM_TEXT_AREA &&
+        last_page_mouse_down_ != -1) {
+      SetFormSelectedText(form_, pages_[last_page_mouse_down_]->GetPage());
+    }
+
     // No need to swallow the event, since this might interfere with the
     // scrollbars if the user is dragging them.
     return false;
@@ -2018,14 +2032,6 @@
     OnChar(synthesized);
   }
 
-  // If form selected text is empty and key pressed within form text area,
-  // plugin text selection should be cleared.
-  if (in_form_text_area_ &&
-      FORM_GetSelectedText(form_, pages_[last_page_mouse_down_]->GetPage(),
-                           nullptr, 0) <= 2) {
-    pp::PDF::SetSelectedText(GetPluginInstance(), "");
-  }
-
   return rv;
 }
 
@@ -2033,9 +2039,9 @@
   if (last_page_mouse_down_ == -1)
     return false;
 
+  // Check if form text selection needs to be updated.
   if (in_form_text_area_) {
-    if (event.GetKeyCode() == ui::VKEY_SHIFT)
-      SetFormSelectedText(form_, pages_[last_page_mouse_down_]->GetPage());
+    SetFormSelectedText(form_, pages_[last_page_mouse_down_]->GetPage());
   }
 
   return !!FORM_OnKeyUp(form_, pages_[last_page_mouse_down_]->GetPage(),
@@ -2429,6 +2435,9 @@
 }
 
 void PDFiumEngine::SelectAll() {
+  if (in_form_text_area_)
+    return;
+
   SelectionChangeInvalidator selection_invalidator(this);
 
   selection_.clear();
@@ -3616,6 +3625,10 @@
   in_form_text_area_ = in_form_text_area;
 }
 
+void PDFiumEngine::SetMouseLeftButtonDown(bool is_mouse_left_button_down) {
+  mouse_left_button_down_ = is_mouse_left_button_down;
+}
+
 void PDFiumEngine::ScheduleTouchTimer(const pp::TouchInputEvent& evt) {
   touch_timers_[++next_touch_timer_id_] = evt;
   client_->ScheduleTouchTimerCallback(next_touch_timer_id_,
diff --git a/pdf/pdfium/pdfium_engine.h b/pdf/pdfium/pdfium_engine.h
index 5b46fc0..e19570d 100644
--- a/pdf/pdfium/pdfium_engine.h
+++ b/pdf/pdfium/pdfium_engine.h
@@ -453,6 +453,9 @@
   // field.
   void SetInFormTextArea(bool in_form_text_area);
 
+  // Sets whether or not left mouse button is currently being held down.
+  void SetMouseLeftButtonDown(bool is_mouse_left_button_down);
+
   bool PageIndexInBounds(int index) const;
 
   void ScheduleTouchTimer(const pp::TouchInputEvent& event);
@@ -653,16 +656,22 @@
   bool defer_page_unload_;
   std::vector<int> deferred_page_unloads_;
 
-  // Used for text selection, but does not include text within form text fields.
+  // Used for text selection, but does not include text within form text areas.
   // There could be more than one range if selection spans more than one page.
   std::vector<PDFiumRange> selection_;
   // True if we're in the middle of text selection.
   bool selecting_;
 
+  MouseDownState mouse_down_state_;
+
+  // Text selection within form text fields and form combobox text fields.
+  std::string selected_form_text_;
+
   // True if focus is in form text field or form combobox text field.
   bool in_form_text_area_;
 
-  MouseDownState mouse_down_state_;
+  // True if left mouse button is currently being held down.
+  bool mouse_left_button_down_;
 
   // Used for searching.
   std::vector<PDFiumRange> find_results_;
diff --git a/remoting/ios/app/BUILD.gn b/remoting/ios/app/BUILD.gn
index 6b3e6cd..d941e5a 100644
--- a/remoting/ios/app/BUILD.gn
+++ b/remoting/ios/app/BUILD.gn
@@ -20,6 +20,8 @@
     "app_view_controller.h",
     "client_connection_view_controller.h",
     "client_connection_view_controller.mm",
+    "help_and_feedback.h",
+    "help_and_feedback.mm",
     "host_collection_header_view.h",
     "host_collection_header_view.mm",
     "host_collection_view_cell.h",
diff --git a/remoting/ios/app/app_delegate.h b/remoting/ios/app/app_delegate.h
index 3f4589a..e2e9bce3 100644
--- a/remoting/ios/app/app_delegate.h
+++ b/remoting/ios/app/app_delegate.h
@@ -24,9 +24,11 @@
 // controller.
 - (void)navigateToHelpCenter:(UINavigationController*)navigationController;
 
-// This will push the Send Feedback view controller onto the provided nav
+// This will present the Send Feedback view controller onto the topmost view
 // controller.
-- (void)navigateToSendFeedback:(UINavigationController*)navigationController;
+// context: a unique identifier for the user's place within the app which can be
+// used to categorize the feedback report and segment usage metrics.
+- (void)presentFeedbackFlowWithContext:(NSString*)context;
 
 // Pop up an Email compose view filled with the instructions to setup the host.
 - (void)emailSetupInstructions;
diff --git a/remoting/ios/app/app_delegate.mm b/remoting/ios/app/app_delegate.mm
index 3222e5b3..b437fce 100644
--- a/remoting/ios/app/app_delegate.mm
+++ b/remoting/ios/app/app_delegate.mm
@@ -15,6 +15,7 @@
 #include "ui/base/resource/resource_bundle.h"
 
 #import "remoting/ios/app/app_view_controller.h"
+#import "remoting/ios/app/help_and_feedback.h"
 #import "remoting/ios/app/remoting_view_controller.h"
 #import "remoting/ios/facade/remoting_oauth_authentication.h"
 
@@ -123,10 +124,8 @@
       navigationController:navigationController];
 }
 
-- (void)navigateToSendFeedback:(UINavigationController*)navigationController {
-  UIViewController* feedbackController = [[UIViewController alloc] init];
-  feedbackController.title = @"Feedback";
-  [navigationController pushViewController:feedbackController animated:YES];
+- (void)presentFeedbackFlowWithContext:(NSString*)context {
+  [HelpAndFeedback.instance presentFeedbackFlowWithContext:context];
 }
 
 #pragma mark - Private
diff --git a/remoting/ios/app/help_and_feedback.h b/remoting/ios/app/help_and_feedback.h
new file mode 100644
index 0000000..ab75aa8
--- /dev/null
+++ b/remoting/ios/app/help_and_feedback.h
@@ -0,0 +1,25 @@
+// 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 REMOTING_IOS_APP_HELP_AND_FEEDBACK_H_
+#define REMOTING_IOS_APP_HELP_AND_FEEDBACK_H_
+
+#import <UIKit/UIKit.h>
+
+// This is the base class to provide help and feedback functionalities. The
+// base implementation does nothing.
+@interface HelpAndFeedback : NSObject
+
+// This will present the Send Feedback view controller onto the topmost view
+// controller.
+// context: a unique identifier for the user's place within the app which can be
+// used to categorize the feedback report and segment usage metrics.
+- (void)presentFeedbackFlowWithContext:(NSString*)context;
+
+// Instance can only be set once.
+@property(nonatomic, class) HelpAndFeedback* instance;
+
+@end
+
+#endif  // REMOTING_IOS_APP_HELP_AND_FEEDBACK_H_
diff --git a/remoting/ios/app/help_and_feedback.mm b/remoting/ios/app/help_and_feedback.mm
new file mode 100644
index 0000000..84d3c7dd
--- /dev/null
+++ b/remoting/ios/app/help_and_feedback.mm
@@ -0,0 +1,35 @@
+// 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.
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+#import "remoting/ios/app/help_and_feedback.h"
+
+#import "base/logging.h"
+
+static HelpAndFeedback* g_helpAndFeedback;
+
+@implementation HelpAndFeedback
+
+#pragma mark - Public
+
+- (void)presentFeedbackFlowWithContext:(NSString*)context {
+  NSLog(@"Called presentFeedbackFlow");
+}
+
+#pragma mark - Static Properties
+
++ (void)setInstance:(HelpAndFeedback*)instance {
+  DCHECK(!g_helpAndFeedback);
+  g_helpAndFeedback = instance;
+}
+
++ (HelpAndFeedback*)instance {
+  DCHECK(g_helpAndFeedback);
+  return g_helpAndFeedback;
+}
+
+@end
diff --git a/remoting/ios/app/main.mm b/remoting/ios/app/main.mm
index 717c5498f..c19a15e 100644
--- a/remoting/ios/app/main.mm
+++ b/remoting/ios/app/main.mm
@@ -12,6 +12,7 @@
 #include "base/command_line.h"
 #include "base/i18n/icu_util.h"
 #import "remoting/ios/app/app_delegate.h"
+#import "remoting/ios/app/help_and_feedback.h"
 #import "remoting/ios/facade/remoting_oauth_authentication.h"
 #import "remoting/ios/facade/remoting_service.h"
 
@@ -35,6 +36,7 @@
   @autoreleasepool {
     RemotingService.instance.authentication =
         [[RemotingOAuthAuthentication alloc] init];
+    HelpAndFeedback.instance = [[HelpAndFeedback alloc] init];
     return UIApplicationMain(
         argc, argv, nil, NSStringFromClass([AppDelegate class]));
   }
diff --git a/remoting/ios/app/settings/remoting_settings_view_controller.mm b/remoting/ios/app/settings/remoting_settings_view_controller.mm
index 923847a..4674eeab 100644
--- a/remoting/ios/app/settings/remoting_settings_view_controller.mm
+++ b/remoting/ios/app/settings/remoting_settings_view_controller.mm
@@ -17,6 +17,7 @@
 #include "base/logging.h"
 
 static NSString* const kReusableIdentifierItem = @"remotingSettingsVCItem";
+static NSString* const kFeedbackContext = @"InSessionFeedbackContext";
 
 @interface RemotingSettingsViewController () {
   MDCAppBar* _appBar;
@@ -316,12 +317,19 @@
     [weakSelf.navigationController setNavigationBarHidden:NO animated:YES];
   };
 
+  // TODO(yuweih): Currently the EAGLView is not captured by the feedback tool.
+  // To get it working we need to override renderInContext in CAEAGLLayer.
   SettingOption* sendFeedbackOption = [[SettingOption alloc] init];
   sendFeedbackOption.title = @"Send feedback";
   sendFeedbackOption.style = FlatButton;
   sendFeedbackOption.action = ^{
-    [AppDelegate.instance navigateToSendFeedback:self.navigationController];
-    [weakSelf.navigationController setNavigationBarHidden:NO animated:YES];
+    // Dismiss self so that it can capture the screenshot of HostView.
+    [weakSelf dismissViewControllerAnimated:YES
+                                 completion:^{
+                                   [AppDelegate.instance
+                                       presentFeedbackFlowWithContext:
+                                           kFeedbackContext];
+                                 }];
   };
 
   [_content addObject:@[ helpCenterOption, faqsOption, sendFeedbackOption ]];
diff --git a/services/data_decoder/image_decoder_impl.cc b/services/data_decoder/image_decoder_impl.cc
index 2ecabe6..f31a5c18 100644
--- a/services/data_decoder/image_decoder_impl.cc
+++ b/services/data_decoder/image_decoder_impl.cc
@@ -40,9 +40,9 @@
                                    bool shrink_to_fit,
                                    int64_t max_size_in_bytes,
                                    const gfx::Size& desired_image_frame_size,
-                                   const DecodeImageCallback& callback) {
+                                   DecodeImageCallback callback) {
   if (encoded_data.size() == 0) {
-    callback.Run(SkBitmap());
+    std::move(callback).Run(SkBitmap());
     return;
   }
 
@@ -103,7 +103,7 @@
     }
   }
 
-  callback.Run(decoded_image);
+  std::move(callback).Run(decoded_image);
 }
 
 }  // namespace data_decoder
diff --git a/services/data_decoder/image_decoder_impl.h b/services/data_decoder/image_decoder_impl.h
index b669b254..b4186171 100644
--- a/services/data_decoder/image_decoder_impl.h
+++ b/services/data_decoder/image_decoder_impl.h
@@ -26,7 +26,7 @@
                    bool shrink_to_fit,
                    int64_t max_size_in_bytes,
                    const gfx::Size& desired_image_frame_size,
-                   const DecodeImageCallback& callback) override;
+                   DecodeImageCallback callback) override;
 
  private:
   const std::unique_ptr<service_manager::ServiceContextRef> service_ref_;
diff --git a/services/data_decoder/public/cpp/decode_image.cc b/services/data_decoder/public/cpp/decode_image.cc
index 3efd460b..9cc6e53 100644
--- a/services/data_decoder/public/cpp/decode_image.cc
+++ b/services/data_decoder/public/cpp/decode_image.cc
@@ -16,16 +16,9 @@
 // ImageDecoder pipe open just long enough to dispatch a reply, at which point
 // the reply is forwarded to the wrapped |callback|.
 void OnDecodeImage(mojom::ImageDecoderPtr decoder,
-                   const mojom::ImageDecoder::DecodeImageCallback& callback,
+                   mojom::ImageDecoder::DecodeImageCallback callback,
                    const SkBitmap& bitmap) {
-  callback.Run(bitmap);
-}
-
-// Called in the case of a connection error on an ImageDecoder proxy.
-void OnConnectionError(
-    const mojom::ImageDecoder::DecodeImageCallback& callback) {
-  SkBitmap null_bitmap;
-  callback.Run(null_bitmap);
+  std::move(callback).Run(bitmap);
 }
 
 }  // namespace
@@ -36,16 +29,19 @@
                  bool shrink_to_fit,
                  uint64_t max_size_in_bytes,
                  const gfx::Size& desired_image_frame_size,
-                 const mojom::ImageDecoder::DecodeImageCallback& callback) {
+                 mojom::ImageDecoder::DecodeImageCallback callback) {
   mojom::ImageDecoderPtr decoder;
   connector->BindInterface(mojom::kServiceName, &decoder);
-  decoder.set_connection_error_handler(
-      base::Bind(&OnConnectionError, callback));
+
+  // |call_once| runs |callback| on its first invocation.
+  auto call_once = base::AdaptCallbackForRepeating(std::move(callback));
+  decoder.set_connection_error_handler(base::Bind(call_once, SkBitmap()));
+
   mojom::ImageDecoder* raw_decoder = decoder.get();
   raw_decoder->DecodeImage(
       encoded_bytes, codec, shrink_to_fit, max_size_in_bytes,
       desired_image_frame_size,
-      base::Bind(&OnDecodeImage, base::Passed(&decoder), callback));
+      base::BindOnce(&OnDecodeImage, std::move(decoder), std::move(call_once)));
 }
 
 }  // namespace data_decoder
diff --git a/services/data_decoder/public/cpp/decode_image.h b/services/data_decoder/public/cpp/decode_image.h
index 2517fdc..0827b1e 100644
--- a/services/data_decoder/public/cpp/decode_image.h
+++ b/services/data_decoder/public/cpp/decode_image.h
@@ -38,7 +38,7 @@
                  bool shrink_to_fit,
                  uint64_t max_size_in_bytes,
                  const gfx::Size& desired_image_frame_size,
-                 const mojom::ImageDecoder::DecodeImageCallback& callback);
+                 mojom::ImageDecoder::DecodeImageCallback callback);
 
 }  // namespace data_decoder
 
diff --git a/services/data_decoder/public/interfaces/BUILD.gn b/services/data_decoder/public/interfaces/BUILD.gn
index 63f687a6..8e695db 100644
--- a/services/data_decoder/public/interfaces/BUILD.gn
+++ b/services/data_decoder/public/interfaces/BUILD.gn
@@ -14,9 +14,6 @@
     "//skia/public/interfaces",
     "//ui/gfx/geometry/mojo",
   ]
-
-  # TODO(crbug.com/714018): Convert the implementation to use OnceCallback.
-  use_once_callback = false
 }
 
 mojom("constants") {
diff --git a/services/file/file_service.cc b/services/file/file_service.cc
index 324eb48..26a2497 100644
--- a/services/file/file_service.cc
+++ b/services/file/file_service.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
+#include "base/task_scheduler/post_task.h"
 #include "components/filesystem/lock_table.h"
 #include "components/leveldb/leveldb_service_impl.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
@@ -47,7 +48,7 @@
  public:
   // Created on the main thread.
   LevelDBServiceObjects(
-      scoped_refptr<base::SingleThreadTaskRunner> file_task_runner)
+      scoped_refptr<base::SequencedTaskRunner> file_task_runner)
       : file_task_runner_(std::move(file_task_runner)) {}
 
   // Destroyed on the |leveldb_service_runner_|.
@@ -63,7 +64,7 @@
   }
 
  private:
-  scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
+  scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
 
   // Variables that are only accessible on the |leveldb_service_runner_| thread.
   std::unique_ptr<leveldb::mojom::LevelDBService> leveldb_service_;
@@ -72,18 +73,16 @@
   DISALLOW_COPY_AND_ASSIGN(LevelDBServiceObjects);
 };
 
-std::unique_ptr<service_manager::Service> CreateFileService(
-    scoped_refptr<base::SingleThreadTaskRunner> file_service_runner,
-    scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner) {
-  return base::MakeUnique<FileService>(std::move(file_service_runner),
-                                       std::move(leveldb_service_runner));
+std::unique_ptr<service_manager::Service> CreateFileService() {
+  return base::MakeUnique<FileService>();
 }
 
-FileService::FileService(
-    scoped_refptr<base::SingleThreadTaskRunner> file_service_runner,
-    scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner)
-    : file_service_runner_(std::move(file_service_runner)),
-      leveldb_service_runner_(std::move(leveldb_service_runner)) {
+FileService::FileService()
+    : file_service_runner_(base::CreateSequencedTaskRunnerWithTraits(
+          {base::MayBlock(), base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
+      leveldb_service_runner_(base::CreateSequencedTaskRunnerWithTraits(
+          {base::MayBlock(), base::WithBaseSyncPrimitives(),
+           base::TaskShutdownBehavior::BLOCK_SHUTDOWN})) {
   registry_.AddInterface<leveldb::mojom::LevelDBService>(base::Bind(
       &FileService::BindLevelDBServiceRequest, base::Unretained(this)));
   registry_.AddInterface<mojom::FileSystem>(
diff --git a/services/file/file_service.h b/services/file/file_service.h
index 124b1c9..49a2f25 100644
--- a/services/file/file_service.h
+++ b/services/file/file_service.h
@@ -7,7 +7,7 @@
 
 #include "base/callback_forward.h"
 #include "base/memory/ref_counted.h"
-#include "base/single_thread_task_runner.h"
+#include "base/sequenced_task_runner.h"
 #include "components/filesystem/lock_table.h"
 #include "components/leveldb/public/interfaces/leveldb.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
@@ -17,15 +17,11 @@
 
 namespace file {
 
-std::unique_ptr<service_manager::Service> CreateFileService(
-    scoped_refptr<base::SingleThreadTaskRunner> file_service_runner,
-    scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner);
+std::unique_ptr<service_manager::Service> CreateFileService();
 
 class FileService : public service_manager::Service {
  public:
-  FileService(
-      scoped_refptr<base::SingleThreadTaskRunner> file_service_runner,
-      scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner);
+  FileService();
   ~FileService() override;
 
  private:
@@ -44,8 +40,8 @@
 
   void OnLevelDBServiceError();
 
-  scoped_refptr<base::SingleThreadTaskRunner> file_service_runner_;
-  scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner_;
+  scoped_refptr<base::SequencedTaskRunner> file_service_runner_;
+  scoped_refptr<base::SequencedTaskRunner> leveldb_service_runner_;
 
   // We create these two objects so we can delete them on the correct task
   // runners.
diff --git a/services/service_manager/embedder/main.cc b/services/service_manager/embedder/main.cc
index 6d8ad13..7acf0e4 100644
--- a/services/service_manager/embedder/main.cc
+++ b/services/service_manager/embedder/main.cc
@@ -464,7 +464,7 @@
       break;
 
     case ProcessType::kEmbedder:
-      if (ServiceManagerIsRemote())
+      if (delegate->IsEmbedderSubprocess())
         CommonSubprocessInit();
       exit_code = delegate->RunEmbedderProcess();
       break;
diff --git a/services/service_manager/embedder/main_delegate.cc b/services/service_manager/embedder/main_delegate.cc
index 51ed032..08804b4 100644
--- a/services/service_manager/embedder/main_delegate.cc
+++ b/services/service_manager/embedder/main_delegate.cc
@@ -10,6 +10,10 @@
 
 MainDelegate::~MainDelegate() = default;
 
+bool MainDelegate::IsEmbedderSubprocess() {
+  return false;
+}
+
 int MainDelegate::RunEmbedderProcess() {
   return 0;
 }
diff --git a/services/service_manager/embedder/main_delegate.h b/services/service_manager/embedder/main_delegate.h
index 9e1b7d3..4b29a413 100644
--- a/services/service_manager/embedder/main_delegate.h
+++ b/services/service_manager/embedder/main_delegate.h
@@ -47,6 +47,10 @@
   // failure.
   virtual int Initialize(const InitializeParams& params) = 0;
 
+  // Indicates whether this (embedder) process should be treated as a subprocess
+  // for the sake of some platform-specific environment initialization details.
+  virtual bool IsEmbedderSubprocess();
+
   // Runs the embedder's own main process logic. Called exactly once after a
   // successful call to Initialize(), and only if the Service Manager core does
   // not know what to do otherwise -- i.e., if it is not starting a new Service
diff --git a/storage/browser/blob/blob_data_handle.cc b/storage/browser/blob/blob_data_handle.cc
index 0ba7b36..5b5a9289 100644
--- a/storage/browser/blob/blob_data_handle.cc
+++ b/storage/browser/blob/blob_data_handle.cc
@@ -146,6 +146,15 @@
   shared_->context_->RunOnConstructionComplete(shared_->uuid_, done);
 }
 
+void BlobDataHandle::RunOnConstructionBegin(const BlobStatusCallback& done) {
+  DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
+  if (!shared_->context_.get()) {
+    done.Run(BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS);
+    return;
+  }
+  shared_->context_->RunOnConstructionBegin(shared_->uuid_, done);
+}
+
 std::unique_ptr<BlobDataSnapshot> BlobDataHandle::CreateSnapshot() const {
   DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
   if (!shared_->context_.get())
diff --git a/storage/browser/blob/blob_data_handle.h b/storage/browser/blob/blob_data_handle.h
index 5346b88..4a5f010 100644
--- a/storage/browser/blob/blob_data_handle.h
+++ b/storage/browser/blob/blob_data_handle.h
@@ -65,11 +65,20 @@
   // The callback will be run on the IO thread when construction of the blob
   // is complete. If construction is already complete, then the task is run
   // immediately on the current message loop (i.e. IO thread).
-  // Must be called on IO thread.  Returns if construction successful.
+  // Must be called on IO thread.
   // Calling this multiple times results in registering multiple
   // completion callbacks.
   void RunOnConstructionComplete(const BlobStatusCallback& done);
 
+  // The callback will be run on the IO thread when construction of the blob
+  // has began. If construction has already began (or has finished already),
+  // then the task is run immediately on the current message loop (i.e. IO
+  // thread).
+  // Must be called on IO thread.
+  // Calling this multiple times results in registering multiple
+  // callbacks.
+  void RunOnConstructionBegin(const BlobStatusCallback& done);
+
   // A BlobReader is used to read the data from the blob.  This object is
   // intended to be transient and should not be stored for any extended period
   // of time.
diff --git a/storage/browser/blob/blob_entry.h b/storage/browser/blob/blob_entry.h
index 4dfa7a8..cc514308 100644
--- a/storage/browser/blob/blob_entry.h
+++ b/storage/browser/blob/blob_entry.h
@@ -88,6 +88,10 @@
     // When our blob finishes building these callbacks are called.
     std::vector<BlobStatusCallback> build_completion_callbacks;
 
+    // When our blob is no longer in PENDING_CONSTRUCTION state these callbacks
+    // are called.
+    std::vector<BlobStatusCallback> build_started_callbacks;
+
    private:
     DISALLOW_COPY_AND_ASSIGN(BuildingState);
   };
diff --git a/storage/browser/blob/blob_reader.cc b/storage/browser/blob/blob_reader.cc
index 56cf9ad..97948a2 100644
--- a/storage/browser/blob/blob_reader.cc
+++ b/storage/browser/blob/blob_reader.cc
@@ -61,6 +61,7 @@
     case BlobStatus::PENDING_QUOTA:
     case BlobStatus::PENDING_TRANSPORT:
     case BlobStatus::PENDING_INTERNALS:
+    case BlobStatus::PENDING_CONSTRUCTION:
       NOTREACHED();
   }
   NOTREACHED();
diff --git a/storage/browser/blob/blob_registry_impl.cc b/storage/browser/blob/blob_registry_impl.cc
index 1233404b..bc398b3 100644
--- a/storage/browser/blob/blob_registry_impl.cc
+++ b/storage/browser/blob/blob_registry_impl.cc
@@ -4,11 +4,253 @@
 
 #include "storage/browser/blob/blob_registry_impl.h"
 
+#include "base/barrier_closure.h"
+#include "base/callback_helpers.h"
+#include "storage/browser/blob/blob_data_builder.h"
 #include "storage/browser/blob/blob_impl.h"
 #include "storage/browser/blob/blob_storage_context.h"
 
 namespace storage {
 
+class BlobRegistryImpl::BlobUnderConstruction {
+ public:
+  BlobUnderConstruction(BlobRegistryImpl* blob_registry,
+                        const std::string& uuid,
+                        const std::string& content_type,
+                        const std::string& content_disposition,
+                        std::vector<mojom::DataElementPtr> elements,
+                        mojo::ReportBadMessageCallback bad_message_callback)
+      : blob_registry_(blob_registry),
+        builder_(uuid),
+        elements_(std::move(elements)),
+        bad_message_callback_(std::move(bad_message_callback)),
+        weak_ptr_factory_(this) {
+    builder_.set_content_type(content_type);
+    builder_.set_content_disposition(content_disposition);
+  }
+
+  // Call this after constructing to kick of fetching of UUIDs of blobs
+  // referenced by this new blob. This (and any further methods) could end up
+  // deleting |this| by removing it from the blobs_under_construction_
+  // collection in the blob service.
+  void StartFetchingBlobUUIDs();
+
+  ~BlobUnderConstruction() {}
+
+  const std::string& uuid() const { return builder_.uuid(); }
+
+ private:
+  BlobStorageContext* context() const { return blob_registry_->context_; }
+
+  // Marks this blob as broken. If an optional |bad_message_reason| is provided,
+  // this will also report a BadMessage on the binding over which the initial
+  // Register request was received.
+  // Also deletes |this| by removing it from the blobs_under_construction_ list.
+  void MarkAsBroken(BlobStatus reason,
+                    const std::string& bad_message_reason = "") {
+    context()->CancelBuildingBlob(uuid(), reason);
+    if (!bad_message_reason.empty())
+      std::move(bad_message_callback_).Run(bad_message_reason);
+    blob_registry_->blobs_under_construction_.erase(uuid());
+  }
+
+  // Called when the UUID of a referenced blob is received.
+  void ReceivedBlobUUID(size_t blob_index, const std::string& uuid);
+
+  // Called by either StartFetchingBlobUUIDs or ReceivedBlobUUID when all the
+  // UUIDs of referenced blobs have been resolved. Starts checking for circular
+  // references. Before we can proceed with actually building the blob, all
+  // referenced blobs also need to have resolved their referenced blobs (to
+  // always be able to calculate the size of the newly built blob). To ensure
+  // this we might have to wait for one or more possibly indirectly dependent
+  // blobs to also have resolved the UUIDs of their dependencies. This waiting
+  // is kicked of by this method.
+  void ResolvedAllBlobUUIDs();
+
+  void DependentBlobReady(BlobStatus status);
+
+  // Called when all blob dependencies have been resolved, and we're sure there
+  // are no circular dependencies. This finally kicks of the actually building
+  // of the blob, and figures out how to transport any bytes that might need
+  // transporting.
+  void ResolvedAllBlobDependencies();
+
+#if DCHECK_IS_ON()
+  // Returns true if the DAG made up by this blob and any other blobs that
+  // are currently being built by BlobRegistryImpl contains any cycles.
+  // |path_from_root| should contain all the nodes that have been visited so
+  // far on a path from whatever node we started our search from.
+  bool ContainsCycles(
+      std::unordered_set<BlobUnderConstruction*>* path_from_root);
+#endif
+
+  // BlobRegistryImpl we belong to.
+  BlobRegistryImpl* blob_registry_;
+
+  // BlobDataBuilder for the blob under construction. Is created in the
+  // constructor, but not filled until all referenced blob UUIDs have been
+  // resolved.
+  BlobDataBuilder builder_;
+
+  // Elements as passed in to Register.
+  std::vector<mojom::DataElementPtr> elements_;
+
+  // Callback to report a BadMessage on the binding on which Register was
+  // called.
+  mojo::ReportBadMessageCallback bad_message_callback_;
+
+  // List of UUIDs for referenced blobs. Same size as |elements_|. All entries
+  // for non-blob elements will remain empty strings.
+  std::vector<std::string> referenced_blob_uuids_;
+
+  // Number of blob UUIDs that have been resolved.
+  size_t resolved_blob_uuid_count_ = 0;
+
+  // Number of dependent blobs that have started constructing.
+  size_t ready_dependent_blob_count_ = 0;
+
+  base::WeakPtrFactory<BlobUnderConstruction> weak_ptr_factory_;
+  DISALLOW_COPY_AND_ASSIGN(BlobUnderConstruction);
+};
+
+void BlobRegistryImpl::BlobUnderConstruction::StartFetchingBlobUUIDs() {
+  size_t blob_count = 0;
+  for (size_t i = 0; i < elements_.size(); ++i) {
+    const auto& element = elements_[i];
+    if (element->is_blob()) {
+      if (element->get_blob()->blob.encountered_error()) {
+        // Will delete |this|.
+        MarkAsBroken(BlobStatus::ERR_REFERENCED_BLOB_BROKEN);
+        return;
+      }
+
+      // If connection to blob is broken, something bad happened, so mark this
+      // new blob as broken, which will delete |this| and keep it from doing
+      // unneeded extra work.
+      element->get_blob()->blob.set_connection_error_handler(base::BindOnce(
+          &BlobUnderConstruction::MarkAsBroken, weak_ptr_factory_.GetWeakPtr(),
+          BlobStatus::ERR_REFERENCED_BLOB_BROKEN, ""));
+
+      element->get_blob()->blob->GetInternalUUID(
+          base::BindOnce(&BlobUnderConstruction::ReceivedBlobUUID,
+                         weak_ptr_factory_.GetWeakPtr(), blob_count++));
+    }
+  }
+  referenced_blob_uuids_.resize(blob_count);
+
+  // TODO(mek): Do we need some kind of timeout for fetching the UUIDs?
+  // Without it a blob could forever remaing pending if a renderer sends us
+  // a BlobPtr connected to a (malicious) non-responding implementation.
+
+  // If there were no unresolved blobs, immediately proceed to the next step.
+  // Currently this will only happen if there are no blobs referenced
+  // whatsoever, but hopefully in the future blob UUIDs will be cached in the
+  // message pipe handle, making things much more efficient in the common case.
+  if (resolved_blob_uuid_count_ == referenced_blob_uuids_.size())
+    ResolvedAllBlobUUIDs();
+}
+
+void BlobRegistryImpl::BlobUnderConstruction::ReceivedBlobUUID(
+    size_t blob_index,
+    const std::string& uuid) {
+  DCHECK(referenced_blob_uuids_[blob_index].empty());
+  DCHECK_LT(resolved_blob_uuid_count_, referenced_blob_uuids_.size());
+
+  referenced_blob_uuids_[blob_index] = uuid;
+  if (++resolved_blob_uuid_count_ == referenced_blob_uuids_.size())
+    ResolvedAllBlobUUIDs();
+}
+
+void BlobRegistryImpl::BlobUnderConstruction::ResolvedAllBlobUUIDs() {
+  DCHECK_EQ(resolved_blob_uuid_count_, referenced_blob_uuids_.size());
+
+#if DCHECK_IS_ON()
+  std::unordered_set<BlobUnderConstruction*> visited;
+  if (ContainsCycles(&visited)) {
+    MarkAsBroken(BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS,
+                 "Cycles in blob references in BlobRegistry::Register");
+    return;
+  }
+#endif
+
+  if (referenced_blob_uuids_.size() == 0) {
+    ResolvedAllBlobDependencies();
+    return;
+  }
+
+  for (const std::string& blob_uuid : referenced_blob_uuids_) {
+    if (blob_uuid.empty() || blob_uuid == uuid() ||
+        !context()->registry().HasEntry(blob_uuid)) {
+      // Will delete |this|.
+      MarkAsBroken(BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS,
+                   "Bad blob references in BlobRegistry::Register");
+      return;
+    }
+
+    std::unique_ptr<BlobDataHandle> handle =
+        context()->GetBlobDataFromUUID(blob_uuid);
+    handle->RunOnConstructionBegin(
+        base::Bind(&BlobUnderConstruction::DependentBlobReady,
+                   weak_ptr_factory_.GetWeakPtr()));
+  }
+}
+
+void BlobRegistryImpl::BlobUnderConstruction::DependentBlobReady(
+    BlobStatus status) {
+  if (++ready_dependent_blob_count_ == referenced_blob_uuids_.size()) {
+    // Asynchronously call ResolvedAllBlobDependencies, as otherwise |this|
+    // might end up getting deleted while ResolvedAllBlobUUIDs is still
+    // iterating over |referenced_blob_uuids_|.
+    base::SequencedTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE,
+        base::Bind(&BlobUnderConstruction::ResolvedAllBlobDependencies,
+                   weak_ptr_factory_.GetWeakPtr()));
+  }
+}
+
+void BlobRegistryImpl::BlobUnderConstruction::ResolvedAllBlobDependencies() {
+  DCHECK_EQ(resolved_blob_uuid_count_, referenced_blob_uuids_.size());
+  DCHECK_EQ(ready_dependent_blob_count_, referenced_blob_uuids_.size());
+
+  // TODO(mek): Fill BlobDataBuilder with elements_ other than blobs.
+  auto blob_uuid_it = referenced_blob_uuids_.begin();
+  for (const auto& element : elements_) {
+    if (element->is_blob()) {
+      DCHECK(blob_uuid_it != referenced_blob_uuids_.end());
+      const std::string& blob_uuid = *blob_uuid_it++;
+      builder_.AppendBlob(blob_uuid, element->get_blob()->offset,
+                          element->get_blob()->length);
+    }
+  }
+  std::unique_ptr<BlobDataHandle> new_handle =
+      context()->BuildPreregisteredBlob(
+          builder_, BlobStorageContext::TransportAllowedCallback());
+
+  // TODO(mek): Update BlobImpl with new BlobDataHandle. Although handles
+  // only differ in their size() attribute, which is currently not used by
+  // BlobImpl.
+  DCHECK(!BlobStatusIsPending(new_handle->GetBlobStatus()));
+}
+
+#if DCHECK_IS_ON()
+bool BlobRegistryImpl::BlobUnderConstruction::ContainsCycles(
+    std::unordered_set<BlobUnderConstruction*>* path_from_root) {
+  if (!path_from_root->insert(this).second)
+    return true;
+  for (const std::string& blob_uuid : referenced_blob_uuids_) {
+    if (blob_uuid.empty())
+      continue;
+    auto it = blob_registry_->blobs_under_construction_.find(blob_uuid);
+    if (it == blob_registry_->blobs_under_construction_.end())
+      continue;
+    if (it->second->ContainsCycles(path_from_root))
+      return true;
+  }
+  path_from_root->erase(this);
+  return false;
+}
+#endif
+
 BlobRegistryImpl::BlobRegistryImpl(BlobStorageContext* context)
     : context_(context), weak_ptr_factory_(this) {}
 
@@ -24,16 +266,24 @@
                                 const std::string& content_disposition,
                                 std::vector<mojom::DataElementPtr> elements,
                                 RegisterCallback callback) {
-  if (uuid.empty() || context_->registry().HasEntry(uuid)) {
+  if (uuid.empty() || context_->registry().HasEntry(uuid) ||
+      base::ContainsKey(blobs_under_construction_, uuid)) {
     bindings_.ReportBadMessage("Invalid UUID passed to BlobRegistry::Register");
     return;
   }
 
-  // TODO(mek): Actually register the blob.
+  // TODO(mek): Security policy checks for files and filesystem items.
+
+  blobs_under_construction_[uuid] = base::MakeUnique<BlobUnderConstruction>(
+      this, uuid, content_type, content_disposition, std::move(elements),
+      bindings_.GetBadMessageCallback());
+
   std::unique_ptr<BlobDataHandle> handle =
-      context_->AddBrokenBlob(uuid, content_type, content_disposition,
-                              BlobStatus::ERR_SOURCE_DIED_IN_TRANSIT);
+      context_->AddFutureBlob(uuid, content_type, content_disposition);
   BlobImpl::Create(std::move(handle), std::move(blob));
+
+  blobs_under_construction_[uuid]->StartFetchingBlobUUIDs();
+
   std::move(callback).Run();
 }
 
diff --git a/storage/browser/blob/blob_registry_impl.h b/storage/browser/blob/blob_registry_impl.h
index 98f5279..7fa0e4d8 100644
--- a/storage/browser/blob/blob_registry_impl.h
+++ b/storage/browser/blob/blob_registry_impl.h
@@ -30,10 +30,15 @@
                        const std::string& uuid) override;
 
  private:
+  class BlobUnderConstruction;
+
   BlobStorageContext* context_;
 
   mojo::BindingSet<mojom::BlobRegistry> bindings_;
 
+  std::map<std::string, std::unique_ptr<BlobUnderConstruction>>
+      blobs_under_construction_;
+
   base::WeakPtrFactory<BlobRegistryImpl> weak_ptr_factory_;
   DISALLOW_COPY_AND_ASSIGN(BlobRegistryImpl);
 };
diff --git a/storage/browser/blob/blob_registry_impl_unittest.cc b/storage/browser/blob/blob_registry_impl_unittest.cc
index e4280a5..a181ebf 100644
--- a/storage/browser/blob/blob_registry_impl_unittest.cc
+++ b/storage/browser/blob/blob_registry_impl_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/test/scoped_task_environment.h"
 #include "mojo/edk/embedder/embedder.h"
+#include "mojo/public/cpp/bindings/strong_binding.h"
 #include "storage/browser/blob/blob_data_builder.h"
 #include "storage/browser/blob/blob_data_handle.h"
 #include "storage/browser/blob/blob_storage_context.h"
@@ -13,6 +14,27 @@
 
 namespace storage {
 
+namespace {
+
+class MockBlob : public mojom::Blob {
+ public:
+  explicit MockBlob(const std::string& uuid) : uuid_(uuid) {}
+
+  void Clone(mojom::BlobRequest request) override {
+    mojo::MakeStrongBinding(base::MakeUnique<MockBlob>(uuid_),
+                            std::move(request));
+  }
+
+  void GetInternalUUID(GetInternalUUIDCallback callback) override {
+    std::move(callback).Run(uuid_);
+  }
+
+ private:
+  std::string uuid_;
+};
+
+}  // namespace
+
 class BlobRegistryImplTest : public testing::Test {
  public:
   void SetUp() override {
@@ -55,6 +77,14 @@
     bad_messages_.push_back(error);
   }
 
+  void WaitForBlobCompletion(BlobDataHandle* blob_handle) {
+    base::RunLoop loop;
+    blob_handle->RunOnConstructionComplete(base::Bind(
+        [](const base::Closure& closure, BlobStatus status) { closure.Run(); },
+        loop.QuitClosure()));
+    loop.Run();
+  }
+
  protected:
   base::test::ScopedTaskEnvironment scoped_task_environment_;
   std::unique_ptr<BlobStorageContext> context_;
@@ -92,51 +122,47 @@
   EXPECT_TRUE(blob.encountered_error());
 }
 
-TEST_F(BlobRegistryImplTest, RegisterEmptyUUID) {
+TEST_F(BlobRegistryImplTest, Register_EmptyUUID) {
   mojom::BlobPtr blob;
-  base::RunLoop loop;
-  registry_.set_connection_error_handler(loop.QuitClosure());
-  registry_->Register(MakeRequest(&blob), "", "", "",
-                      std::vector<mojom::DataElementPtr>(), loop.QuitClosure());
-  loop.Run();
+  EXPECT_FALSE(registry_->Register(MakeRequest(&blob), "", "", "",
+                                   std::vector<mojom::DataElementPtr>()));
 
   EXPECT_EQ(1u, bad_messages_.size());
+
+  registry_.FlushForTesting();
   EXPECT_TRUE(registry_.encountered_error());
 
   blob.FlushForTesting();
   EXPECT_TRUE(blob.encountered_error());
 }
 
-TEST_F(BlobRegistryImplTest, RegisterExistingUUID) {
+TEST_F(BlobRegistryImplTest, Register_ExistingUUID) {
   const std::string kId = "id";
   std::unique_ptr<BlobDataHandle> handle =
       CreateBlobFromString(kId, "hello world");
 
   mojom::BlobPtr blob;
-  base::RunLoop loop;
-  registry_.set_connection_error_handler(loop.QuitClosure());
-  registry_->Register(MakeRequest(&blob), kId, "", "",
-                      std::vector<mojom::DataElementPtr>(), loop.QuitClosure());
-  loop.Run();
+  EXPECT_FALSE(registry_->Register(MakeRequest(&blob), kId, "", "",
+                                   std::vector<mojom::DataElementPtr>()));
 
   EXPECT_EQ(1u, bad_messages_.size());
+
+  registry_.FlushForTesting();
   EXPECT_TRUE(registry_.encountered_error());
 
   blob.FlushForTesting();
   EXPECT_TRUE(blob.encountered_error());
 }
 
-TEST_F(BlobRegistryImplTest, RegisterEmptyBlob) {
+TEST_F(BlobRegistryImplTest, Register_EmptyBlob) {
   const std::string kId = "id";
   const std::string kContentType = "content/type";
   const std::string kContentDisposition = "disposition";
 
   mojom::BlobPtr blob;
-  base::RunLoop loop;
-  registry_->Register(MakeRequest(&blob), kId, kContentType,
-                      kContentDisposition, std::vector<mojom::DataElementPtr>(),
-                      loop.QuitClosure());
-  loop.Run();
+  EXPECT_TRUE(registry_->Register(MakeRequest(&blob), kId, kContentType,
+                                  kContentDisposition,
+                                  std::vector<mojom::DataElementPtr>()));
 
   EXPECT_TRUE(bad_messages_.empty());
 
@@ -146,6 +172,197 @@
   EXPECT_EQ(kContentType, handle->content_type());
   EXPECT_EQ(kContentDisposition, handle->content_disposition());
   EXPECT_EQ(0u, handle->size());
+
+  WaitForBlobCompletion(handle.get());
+
+  EXPECT_FALSE(handle->IsBroken());
+  EXPECT_EQ(BlobStatus::DONE, handle->GetBlobStatus());
+}
+
+TEST_F(BlobRegistryImplTest, Register_ReferencedBlobClosedPipe) {
+  const std::string kId = "id";
+
+  std::vector<mojom::DataElementPtr> elements;
+  mojom::BlobPtr referenced_blob;
+  MakeRequest(&referenced_blob);
+  elements.push_back(mojom::DataElement::NewBlob(
+      mojom::DataElementBlob::New(std::move(referenced_blob), 0, 16)));
+
+  mojom::BlobPtr blob;
+  EXPECT_TRUE(registry_->Register(MakeRequest(&blob), kId, "", "",
+                                  std::move(elements)));
+  EXPECT_TRUE(bad_messages_.empty());
+
+  std::unique_ptr<BlobDataHandle> handle = context_->GetBlobDataFromUUID(kId);
+  WaitForBlobCompletion(handle.get());
+
+  EXPECT_TRUE(handle->IsBroken());
+  EXPECT_EQ(BlobStatus::ERR_REFERENCED_BLOB_BROKEN, handle->GetBlobStatus());
+}
+
+TEST_F(BlobRegistryImplTest, Register_SelfReference) {
+  const std::string kId = "id";
+
+  mojom::BlobPtr blob;
+  mojom::BlobRequest blob_request = MakeRequest(&blob);
+
+  std::vector<mojom::DataElementPtr> elements;
+  elements.push_back(mojom::DataElement::NewBlob(
+      mojom::DataElementBlob::New(std::move(blob), 0, 16)));
+
+  EXPECT_TRUE(registry_->Register(std::move(blob_request), kId, "", "",
+                                  std::move(elements)));
+  EXPECT_TRUE(bad_messages_.empty());
+
+  std::unique_ptr<BlobDataHandle> handle = context_->GetBlobDataFromUUID(kId);
+  WaitForBlobCompletion(handle.get());
+
+  EXPECT_TRUE(handle->IsBroken());
+  EXPECT_EQ(BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS,
+            handle->GetBlobStatus());
+
+  EXPECT_EQ(1u, bad_messages_.size());
+
+  registry_.FlushForTesting();
+  EXPECT_TRUE(registry_.encountered_error());
+}
+
+TEST_F(BlobRegistryImplTest, Register_CircularReference) {
+  const std::string kId1 = "id1";
+  const std::string kId2 = "id2";
+  const std::string kId3 = "id3";
+
+  mojom::BlobPtr blob1, blob2, blob3;
+  mojom::BlobRequest blob_request1 = MakeRequest(&blob1);
+  mojom::BlobRequest blob_request2 = MakeRequest(&blob2);
+  mojom::BlobRequest blob_request3 = MakeRequest(&blob3);
+
+  std::vector<mojom::DataElementPtr> elements1;
+  elements1.push_back(mojom::DataElement::NewBlob(
+      mojom::DataElementBlob::New(std::move(blob1), 0, 16)));
+
+  std::vector<mojom::DataElementPtr> elements2;
+  elements2.push_back(mojom::DataElement::NewBlob(
+      mojom::DataElementBlob::New(std::move(blob2), 0, 16)));
+
+  std::vector<mojom::DataElementPtr> elements3;
+  elements3.push_back(mojom::DataElement::NewBlob(
+      mojom::DataElementBlob::New(std::move(blob3), 0, 16)));
+
+  EXPECT_TRUE(registry_->Register(std::move(blob_request1), kId1, "", "",
+                                  std::move(elements2)));
+  EXPECT_TRUE(registry_->Register(std::move(blob_request2), kId2, "", "",
+                                  std::move(elements3)));
+  EXPECT_TRUE(registry_->Register(std::move(blob_request3), kId3, "", "",
+                                  std::move(elements1)));
+  EXPECT_TRUE(bad_messages_.empty());
+
+#if DCHECK_IS_ON()
+  // Without DCHECKs on this will just hang forever.
+  std::unique_ptr<BlobDataHandle> handle1 = context_->GetBlobDataFromUUID(kId1);
+  std::unique_ptr<BlobDataHandle> handle2 = context_->GetBlobDataFromUUID(kId2);
+  std::unique_ptr<BlobDataHandle> handle3 = context_->GetBlobDataFromUUID(kId3);
+  WaitForBlobCompletion(handle1.get());
+  WaitForBlobCompletion(handle2.get());
+  WaitForBlobCompletion(handle3.get());
+
+  EXPECT_TRUE(handle1->IsBroken());
+  EXPECT_TRUE(handle2->IsBroken());
+  EXPECT_TRUE(handle3->IsBroken());
+
+  BlobStatus status1 = handle1->GetBlobStatus();
+  BlobStatus status2 = handle2->GetBlobStatus();
+  BlobStatus status3 = handle3->GetBlobStatus();
+  EXPECT_TRUE(status1 == BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS ||
+              status1 == BlobStatus::ERR_REFERENCED_BLOB_BROKEN);
+  EXPECT_TRUE(status2 == BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS ||
+              status2 == BlobStatus::ERR_REFERENCED_BLOB_BROKEN);
+  EXPECT_TRUE(status3 == BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS ||
+              status3 == BlobStatus::ERR_REFERENCED_BLOB_BROKEN);
+  EXPECT_EQ((status1 == BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS) +
+                (status2 == BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS) +
+                (status3 == BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS),
+            1);
+
+  EXPECT_EQ(1u, bad_messages_.size());
+
+  registry_.FlushForTesting();
+  EXPECT_TRUE(registry_.encountered_error());
+#endif
+}
+
+TEST_F(BlobRegistryImplTest, Register_NonExistentBlob) {
+  const std::string kId = "id";
+
+  std::vector<mojom::DataElementPtr> elements;
+  mojom::BlobPtr referenced_blob;
+  mojo::MakeStrongBinding(base::MakeUnique<MockBlob>("mock blob"),
+                          MakeRequest(&referenced_blob));
+  elements.push_back(mojom::DataElement::NewBlob(
+      mojom::DataElementBlob::New(std::move(referenced_blob), 0, 16)));
+
+  mojom::BlobPtr blob;
+  EXPECT_TRUE(registry_->Register(MakeRequest(&blob), kId, "", "",
+                                  std::move(elements)));
+  EXPECT_TRUE(bad_messages_.empty());
+
+  std::unique_ptr<BlobDataHandle> handle = context_->GetBlobDataFromUUID(kId);
+  WaitForBlobCompletion(handle.get());
+
+  EXPECT_TRUE(handle->IsBroken());
+  EXPECT_EQ(BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS,
+            handle->GetBlobStatus());
+
+  EXPECT_EQ(1u, bad_messages_.size());
+
+  registry_.FlushForTesting();
+  EXPECT_TRUE(registry_.encountered_error());
+}
+
+TEST_F(BlobRegistryImplTest, Register_ValidBlobReferences) {
+  const std::string kId1 = "id1";
+  std::unique_ptr<BlobDataHandle> handle =
+      CreateBlobFromString(kId1, "hello world");
+  mojom::BlobPtr blob1;
+  mojo::MakeStrongBinding(base::MakeUnique<MockBlob>(kId1),
+                          MakeRequest(&blob1));
+
+  const std::string kId2 = "id2";
+  mojom::BlobPtr blob2;
+  mojom::BlobRequest blob_request2 = MakeRequest(&blob2);
+
+  std::vector<mojom::DataElementPtr> elements1;
+  elements1.push_back(mojom::DataElement::NewBlob(
+      mojom::DataElementBlob::New(std::move(blob1), 0, 8)));
+
+  std::vector<mojom::DataElementPtr> elements2;
+  elements2.push_back(mojom::DataElement::NewBlob(
+      mojom::DataElementBlob::New(std::move(blob2), 0, 8)));
+
+  mojom::BlobPtr final_blob;
+  const std::string kId3 = "id3";
+  EXPECT_TRUE(registry_->Register(MakeRequest(&final_blob), kId3, "", "",
+                                  std::move(elements2)));
+  EXPECT_TRUE(registry_->Register(std::move(blob_request2), kId2, "", "",
+                                  std::move(elements1)));
+
+  // kId3 references kId2, kId2 reference kId1, kId1 is a simple string.
+  std::unique_ptr<BlobDataHandle> handle2 = context_->GetBlobDataFromUUID(kId2);
+  std::unique_ptr<BlobDataHandle> handle3 = context_->GetBlobDataFromUUID(kId3);
+  WaitForBlobCompletion(handle2.get());
+  WaitForBlobCompletion(handle3.get());
+
+  EXPECT_FALSE(handle2->IsBroken());
+  EXPECT_EQ(BlobStatus::DONE, handle2->GetBlobStatus());
+
+  EXPECT_FALSE(handle3->IsBroken());
+  EXPECT_EQ(BlobStatus::DONE, handle3->GetBlobStatus());
+
+  BlobDataBuilder expected_blob_data(kId2);
+  expected_blob_data.AppendData("hello wo");
+
+  EXPECT_EQ(expected_blob_data, *handle2->CreateSnapshot());
+  EXPECT_EQ(expected_blob_data, *handle3->CreateSnapshot());
 }
 
 }  // namespace storage
diff --git a/storage/browser/blob/blob_storage_context.cc b/storage/browser/blob/blob_storage_context.cc
index acc086e..d84d10f 100644
--- a/storage/browser/blob/blob_storage_context.cc
+++ b/storage/browser/blob/blob_storage_context.cc
@@ -447,6 +447,32 @@
   DecrementBlobRefCount(uuid);
 }
 
+std::unique_ptr<BlobDataHandle> BlobStorageContext::AddFutureBlob(
+    const std::string& uuid,
+    const std::string& content_type,
+    const std::string& content_disposition) {
+  DCHECK(!registry_.HasEntry(uuid));
+
+  BlobEntry* entry =
+      registry_.CreateEntry(uuid, content_type, content_disposition);
+  entry->set_size(DataElement::kUnknownSize);
+  entry->set_status(BlobStatus::PENDING_CONSTRUCTION);
+  entry->set_building_state(base::MakeUnique<BlobEntry::BuildingState>(
+      false, TransportAllowedCallback(), 0));
+  return CreateHandle(uuid, entry);
+}
+
+std::unique_ptr<BlobDataHandle> BlobStorageContext::BuildPreregisteredBlob(
+    const BlobDataBuilder& content,
+    const TransportAllowedCallback& transport_allowed_callback) {
+  BlobEntry* entry = registry_.GetEntry(content.uuid());
+  DCHECK(entry);
+  DCHECK_EQ(BlobStatus::PENDING_CONSTRUCTION, entry->status());
+  entry->set_size(0);
+
+  return BuildBlobInternal(entry, content, transport_allowed_callback);
+}
+
 std::unique_ptr<BlobDataHandle> BlobStorageContext::BuildBlob(
     const BlobDataBuilder& content,
     const TransportAllowedCallback& transport_allowed_callback) {
@@ -455,6 +481,13 @@
   BlobEntry* entry = registry_.CreateEntry(
       content.uuid(), content.content_type_, content.content_disposition_);
 
+  return BuildBlobInternal(entry, content, transport_allowed_callback);
+}
+
+std::unique_ptr<BlobDataHandle> BlobStorageContext::BuildBlobInternal(
+    BlobEntry* entry,
+    const BlobDataBuilder& content,
+    const TransportAllowedCallback& transport_allowed_callback) {
   // This flattens all blob references in the transportion content out and
   // stores the complete item representation in the internal data.
   BlobFlattener flattener(content, entry, &registry_);
@@ -463,6 +496,8 @@
          transport_allowed_callback)
       << "If we have pending unpopulated content then a callback is required";
 
+  DCHECK(flattener.total_size == 0 ||
+         flattener.total_size == entry->total_size());
   entry->set_size(flattener.total_size);
   entry->set_status(flattener.status);
   std::unique_ptr<BlobDataHandle> handle = CreateHandle(content.uuid_, entry);
@@ -499,6 +534,7 @@
     }
   }
 
+  auto previous_building_state = std::move(entry->building_state_);
   entry->set_building_state(base::MakeUnique<BlobEntry::BuildingState>(
       !flattener.pending_transport_items.empty(), transport_allowed_callback,
       num_building_dependent_blobs));
@@ -506,6 +542,19 @@
   std::swap(building_state->copies, flattener.copies);
   std::swap(building_state->dependent_blobs, dependent_blobs);
   std::swap(building_state->transport_items, flattener.transport_items);
+  if (previous_building_state) {
+    DCHECK(!previous_building_state->transport_items_present);
+    DCHECK(!previous_building_state->transport_allowed_callback);
+    DCHECK(previous_building_state->transport_items.empty());
+    DCHECK(previous_building_state->dependent_blobs.empty());
+    DCHECK(previous_building_state->copies.empty());
+    std::swap(building_state->build_completion_callbacks,
+              previous_building_state->build_completion_callbacks);
+    auto runner = base::ThreadTaskRunnerHandle::Get();
+    for (const auto& callback :
+         previous_building_state->build_started_callbacks)
+      runner->PostTask(FROM_HERE, base::BindOnce(callback, entry->status()));
+  }
 
   // Break ourselves if we have an error. BuildingState must be set first so the
   // callback is called correctly.
@@ -633,6 +682,18 @@
   done.Run(entry->status());
 }
 
+void BlobStorageContext::RunOnConstructionBegin(
+    const std::string& uuid,
+    const BlobStatusCallback& done) {
+  BlobEntry* entry = registry_.GetEntry(uuid);
+  DCHECK(entry);
+  if (entry->status() == BlobStatus::PENDING_CONSTRUCTION) {
+    entry->building_state_->build_started_callbacks.push_back(done);
+    return;
+  }
+  done.Run(entry->status());
+}
+
 std::unique_ptr<BlobDataHandle> BlobStorageContext::CreateHandle(
     const std::string& uuid,
     BlobEntry* entry) {
@@ -664,6 +725,12 @@
         entry->building_state_->transport_allowed_callback;
     entry->building_state_->transport_allowed_callback.Reset();
   }
+  if (entry->building_state_ &&
+      entry->status() == BlobStatus::PENDING_CONSTRUCTION) {
+    auto runner = base::ThreadTaskRunnerHandle::Get();
+    for (const auto& callback : entry->building_state_->build_started_callbacks)
+      runner->PostTask(FROM_HERE, base::BindOnce(callback, reason));
+  }
   ClearAndFreeMemory(entry);
   entry->set_status(reason);
   if (transport_allowed_callback) {
diff --git a/storage/browser/blob/blob_storage_context.h b/storage/browser/blob/blob_storage_context.h
index 35069692..a923cdb5 100644
--- a/storage/browser/blob/blob_storage_context.h
+++ b/storage/browser/blob/blob_storage_context.h
@@ -100,6 +100,25 @@
       const BlobDataBuilder& input_builder,
       const TransportAllowedCallback& transport_allowed_callback);
 
+  // Similar to BuildBlob, but this merely registers a blob that will be built
+  // in the future. The caller must later call either BuildPreregisteredBlob
+  // (to actually start building the blob), or CancelBuildingBlob (if an error
+  // occured).
+  // The returned BlobDataHandle (as well as any handles returned by
+  // GetBlobDataFromUUID before BuildPreregisteredBlob is called) will always
+  // have kUnknownSize for its size. A BlobDataHandle with the correct size is
+  // later returned by BuildPreregisteredBlob.
+  std::unique_ptr<BlobDataHandle> AddFutureBlob(
+      const std::string& uuid,
+      const std::string& content_type,
+      const std::string& content_disposition);
+
+  // Same as BuildBlob, but for a blob that was previously registered by calling
+  // AddFutureBlob.
+  std::unique_ptr<BlobDataHandle> BuildPreregisteredBlob(
+      const BlobDataBuilder& input_builder,
+      const TransportAllowedCallback& transport_allowed_callback);
+
   // This breaks a blob that is currently being built by using the BuildBlob
   // method above. Any callbacks waiting on this blob, including the
   // |transport_allowed_callback| callback given to BuildBlob, will be called
@@ -224,6 +243,11 @@
   void RunOnConstructionComplete(const std::string& uuid,
                                  const BlobStatusCallback& done_callback);
 
+  // Runs |done| when construction begins (when the blob is no longer
+  // PENDING_CONSTRUCTION) with the new status of the blob.
+  void RunOnConstructionBegin(const std::string& uuid,
+                              const BlobStatusCallback& done_callback);
+
   BlobStorageRegistry* mutable_registry() { return &registry_; }
 
   BlobMemoryController* mutable_memory_controller() {
@@ -231,6 +255,11 @@
   }
 
  private:
+  std::unique_ptr<BlobDataHandle> BuildBlobInternal(
+      BlobEntry* entry,
+      const BlobDataBuilder& input_builder,
+      const TransportAllowedCallback& transport_allowed_callback);
+
   std::unique_ptr<BlobDataHandle> CreateHandle(const std::string& uuid,
                                                BlobEntry* entry);
 
diff --git a/storage/browser/blob/view_blob_internals_job.cc b/storage/browser/blob/view_blob_internals_job.cc
index 3f4c29b..14e4e900 100644
--- a/storage/browser/blob/view_blob_internals_job.cc
+++ b/storage/browser/blob/view_blob_internals_job.cc
@@ -95,6 +95,9 @@
     case BlobStatus::PENDING_INTERNALS:
       return "BlobStatus::PENDING_INTERNALS: Blob construction is pending on "
              "dependency blobs to finish construction.";
+    case BlobStatus::PENDING_CONSTRUCTION:
+      return "BlobStatus::PENDING_CONSTRUCTION: Blob construction is pending "
+             "on resolving the UUIDs of refereneced blobs.";
   }
   NOTREACHED();
   return "Invalid blob state.";
diff --git a/storage/common/blob_storage/blob_storage_constants.cc b/storage/common/blob_storage/blob_storage_constants.cc
index 72411a7f..a877255f 100644
--- a/storage/common/blob_storage/blob_storage_constants.cc
+++ b/storage/common/blob_storage/blob_storage_constants.cc
@@ -29,7 +29,7 @@
 bool BlobStatusIsPending(BlobStatus status) {
   int status_int = static_cast<int>(status);
   return status_int >= static_cast<int>(BlobStatus::PENDING_QUOTA) &&
-         status_int <= static_cast<int>(BlobStatus::PENDING_INTERNALS);
+         status_int <= static_cast<int>(BlobStatus::LAST_PENDING);
 }
 
 bool BlobStatusIsBadIPC(BlobStatus status) {
diff --git a/storage/common/blob_storage/blob_storage_constants.h b/storage/common/blob_storage/blob_storage_constants.h
index 4a4e207a..788a063 100644
--- a/storage/common/blob_storage/blob_storage_constants.h
+++ b/storage/common/blob_storage/blob_storage_constants.h
@@ -116,7 +116,10 @@
   // has been populated. See BlobEntry::BuildingState for more info.
   // TODO(dmurph): Change to PENDING_REFERENCED_BLOBS (crbug.com/670398).
   PENDING_INTERNALS = 203,
-  LAST = PENDING_INTERNALS
+  // Waiting for construction to begin.
+  PENDING_CONSTRUCTION = 204,
+  LAST_PENDING = PENDING_CONSTRUCTION,
+  LAST = LAST_PENDING
 };
 
 using BlobStatusCallback = base::Callback<void(BlobStatus)>;
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
index e9d3328..339e5ac 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -5223,6 +5223,39 @@
 crbug.com/591099 external/wpt/cssom-view/scrollingElement.html [ Crash ]
 crbug.com/591099 external/wpt/cssom-view/ttwf-js-cssomview-getclientrects-length.html [ Crash ]
 crbug.com/591099 external/wpt/cssom/serialize-values.html [ Pass Timeout ]
+crbug.com/591099 external/wpt/css-paint-api/geometry-background-image-tiled-001.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/geometry-background-image-tiled-002.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/geometry-background-image-tiled-003.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/geometry-background-image-001.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/geometry-background-image-002.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/geometry-background-image-003.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/geometry-border-image-001.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/geometry-border-image-002.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/geometry-border-image-003.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/geometry-border-image-004.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/geometry-border-image-005.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/paint2d-zoom.html [ Failure Pass ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-001.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-002.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-003.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-004.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-005.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-006.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-007.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-008.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-009.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-010.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-011.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-012.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-013.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-014.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-015.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-016.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/parse-input-arguments-017.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/registered-properties-in-custom-paint.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/style-background-image.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/style-before-pseudo.html [ Failure ]
+crbug.com/591099 external/wpt/css-paint-api/style-first-letter-pseudo.html [ Failure ]
 crbug.com/591099 external/wpt/custom-elements/custom-element-reaction-queue.html [ Crash ]
 crbug.com/591099 external/wpt/custom-elements/custom-element-registry/per-global.html [ Crash ]
 crbug.com/591099 external/wpt/custom-elements/htmlconstructor/newtarget.html [ Crash ]
@@ -12900,6 +12933,7 @@
 crbug.com/591099 fast/replaced/vertical-writing-mode-max-logical-width-replaced.html [ Failure ]
 crbug.com/591099 fast/replaced/width100percent-checkbox.html [ Failure Pass ]
 crbug.com/591099 fast/replaced/width100percent-radio.html [ Failure Pass ]
+crbug.com/591099 fast/rootscroller/set-root-scroller.html [ Failure ]
 crbug.com/591099 fast/ruby/base-shorter-than-text.html [ Crash Failure ]
 crbug.com/591099 fast/ruby/float-overhang-from-ruby-text.html [ Crash Failure ]
 crbug.com/591099 fast/ruby/floating-ruby-text.html [ Crash Failure ]
@@ -12989,7 +13023,6 @@
 crbug.com/591099 fast/scrolling/scrollbar-tickmarks-hittest.html [ Failure ]
 crbug.com/591099 fast/scrolling/scrolling-apis-nan-scroll-position.html [ Failure ]
 crbug.com/591099 fast/scrolling/scrolling-apis-subpixel.html [ Failure ]
-crbug.com/591099 fast/scrolling/set-root-scroller.html [ Failure ]
 crbug.com/591099 fast/selectors/018.html [ Failure ]
 crbug.com/591099 fast/selectors/018b.html [ Failure ]
 crbug.com/591099 fast/selectors/019.html [ Failure ]
@@ -14447,19 +14480,9 @@
 crbug.com/591099 http/tests/css/shared-stylesheet-mutation-preconstruct.html [ Failure ]
 crbug.com/591099 http/tests/css/shared-stylesheet-mutation.html [ Failure ]
 crbug.com/591099 http/tests/csspaint/border-color.html [ Failure ]
-crbug.com/591099 http/tests/csspaint/geometry-background-image-tiled.html [ Failure ]
-crbug.com/591099 http/tests/csspaint/geometry-background-image.html [ Failure ]
-crbug.com/591099 http/tests/csspaint/geometry-border-image.html [ Failure ]
 crbug.com/591099 http/tests/csspaint/invalidation-background-image.html [ Timeout ]
 crbug.com/591099 http/tests/csspaint/invalidation-border-image.html [ Timeout ]
 crbug.com/591099 http/tests/csspaint/invalidation-content-image.html [ Timeout ]
-crbug.com/591099 http/tests/csspaint/paint2d-zoom.html [ Failure Pass ]
-crbug.com/591099 http/tests/csspaint/parse-input-arguments.html [ Failure ]
-crbug.com/591099 http/tests/csspaint/registerPaint.html [ Failure ]
-crbug.com/591099 http/tests/csspaint/registered-properties-in-custom-paint.html [ Failure ]
-crbug.com/591099 http/tests/csspaint/style-background-image.html [ Failure ]
-crbug.com/591099 http/tests/csspaint/style-before-pseudo.html [ Failure ]
-crbug.com/591099 http/tests/csspaint/style-first-letter-pseudo.html [ Failure ]
 crbug.com/591099 http/tests/dom/EventListener-incumbent-global-1.html [ Crash ]
 crbug.com/591099 http/tests/dom/EventListener-incumbent-global-2.html [ Crash ]
 crbug.com/591099 http/tests/dom/create-contextual-fragment-from-bodyless-svg-document-range.html [ Failure ]
@@ -20262,1009 +20285,7 @@
 crbug.com/591099 virtual/android/fullscreen/video-controls-timeline.html [ Failure ]
 crbug.com/591099 virtual/android/fullscreen/video-fail-to-enter-full-screen.html [ Failure ]
 crbug.com/591099 virtual/android/media/mediadocument/media-document-with-download-button.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/absolute-inside-out-of-view-fixed.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/animation/busy-indicator.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/animation/hidden-composited.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/animation/state-at-end-event-transform-layer.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/backface-visibility/backface-visibility-image.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/backface-visibility/backface-visibility-webgl.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/backing/no-backing-foreground-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/checkerboard.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/child-transform-layer-requires-box.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/child-transform-layer-rounding.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/clip-child-by-non-stacking-ancestor.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/color-matching/image-color-matching.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/columns/composited-in-paginated.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/columns/geometry-map-paginated-assert.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/composited-negative-zindex-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/compositing-visible-descendant.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/background-clip.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/background-color.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/body-background-painted.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/body-background-skipped.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/filter.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/hidden-with-visible-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/hidden-with-visible-text.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/layer-opacity.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/layer-transform.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/contents-opaque/overflow-hidden-child-layers.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/culling/clear-fixed-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/direct-image-compositing.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/empty-render-surface-crasher.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/filters/sw-layer-overlaps-hw-shadow.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/filters/sw-shadow-overlaps-hw-layer.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/filters/sw-shadow-overlaps-hw-shadow.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/fixed-position-changed-to-absolute.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/framesets/composited-frame-alignment.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/generated-content.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/abs-position-inside-opacity.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/ancestor-overflow-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/assert-marquee-timer.html [ Crash ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/bounds-clipped-composited-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/bounds-ignores-hidden-composited-descendant.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/bounds-ignores-hidden-dynamic.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/bounds-ignores-hidden.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/clip-inside.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/clip-with-shadow.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/clip.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/clipped-video-controller.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/clipping-foreground.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/composited-html-size.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/composited-in-columns.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/empty-embed-rects.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/fixed-in-composited.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/fixed-position-composited-page-scale-down.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/fixed-position-composited-page-scale.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/fixed-position-transform-composited-page-scale-down.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/fixed-position-transform-composited-page-scale.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/fixed-position.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/flipped-writing-mode.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/foreground-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/geometry-map-scroll-during-layout-assertion.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/horizontal-scroll-composited.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/layer-due-to-layer-children-deep-switch.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/layer-due-to-layer-children-deep.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/layer-due-to-layer-children-switch.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/layer-due-to-layer-children.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/limit-layer-bounds-opacity-transition.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/limit-layer-bounds-overflow-root.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/limit-layer-bounds-positioned-transition.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/limit-layer-bounds-positioned.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/limit-layer-bounds-transformed.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/object-clip-rects-assertion.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/outline-change.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/partial-layout-update.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/preserve-3d-switching.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/repaint-foreground-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/root-layer-update.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/tall-page-composited.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/transfrom-origin-on-zero-size-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/vertical-scroll-composited.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/video-fixed-scrolling.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/geometry/video-opacity-overlay.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-2-iframe-composited-outer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-late-composite.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-late-composite.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-2-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-img-and-text-2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-img-transformed.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-img.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-overflowing-text-crash.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-shadow-tree.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/become-composited-nested-iframes.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/become-overlapped-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/composited-iframe-alignment.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/composited-iframe-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/composited-parent-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/connect-compositing-iframe-delayed.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/connect-compositing-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/connect-compositing-iframe2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/connect-compositing-iframe3.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/enter-compositing-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/floating-self-painting-frame-complex.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/floating-self-painting-frame.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/iframe-composited-scrolling-hide-and-show.html [ Crash ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/iframe-content-flipping.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/iframe-copy-on-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/iframe-in-composited-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/iframe-resize.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/iframe-size-from-zero.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/invisible-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/invisible-nested-iframe-hide.html [ Crash ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/invisible-nested-iframe-show.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/invisible-nested-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/layout-on-compositing-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/nested-iframe-scrolling.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/overlapped-iframe-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/overlapped-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/overlapped-nested-iframes.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/remove-iframe-crash.html [ Crash ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/resizer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/iframes/scrolling-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/images/content-image.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/images/direct-image-background-color.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/images/direct-svg-image.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/img-layer-object-fit.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/animation-overlap-with-children.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/assumed-overlap-for-inline-transform.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-and-transform.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-change-out-of-view-in-view.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-in-fixed-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-no-content.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-body-overlap.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view-positioning.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view-scaled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-under-transform.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/no-compositing-for-fixed-position-under-transform.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/no-compositing-for-preserve-3d.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/overflow-scroll-overlap.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/overlap-animation-clipping.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/overlap-animation-container.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/overlap-animation.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/overlap-child-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/overlap-clipping.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/overlap-transformed-3d.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/overlap-transformed-and-clipped.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/overlap-transformed-layer-with-transform-body.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/overlap-transformed-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/overlap-transformed-preserved-3d.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/overlap-transforms.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/remove-clipping-layer-with-no-children.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/rotate3d-overlap.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/scroll-partial-update.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/spanOverlapsCanvas.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/stacking-context-overlap-nested.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/stacking-context-overlap.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/translatez-added.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layer-creation/translatez-overlap.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layers-inside-overflow-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/layout-width-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/lots-of-img-layers-with-opacity.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/lots-of-img-layers.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/masks/direct-image-mask.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/masks/mask-layer-size.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/masks/mask-of-clipped-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/masks/mask-with-added-filters.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/masks/mask-with-removed-filters.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/masks/masked-ancestor.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/masks/multiple-masks.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/masks/simple-composited-mask.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/nested-border-radius-composited-child.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/opacity-with-mask.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/accelerated-scrolling-with-clip-path-text.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/accelerated-scrolling-with-clip-path.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/ancestor-overflow.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/avoid-ancestor-clip-for-scroll-children.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/border-radius-on-grandparent-composited-grandchild.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/border-radius-on-parent-composited-grandchild.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/border-radius-on-two-ancestors-composited-grandchild.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/border-radius-styles-with-composited-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/clear-scroll-parent.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/clip-descendents.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/clip-parent-reset.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/clipping-ancestor-with-accelerated-scrolling-ancestor.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/composited-nested-sticky-left.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/composited-scrolling-paint-phases.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/content-gains-scrollbars.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/content-loses-scrollbars.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/fixed-position-ancestor-clip.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/fractional-sized-scrolling-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/grandchild-composited-with-border-radius-ancestor.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/grandchild-with-border-radius-ancestor.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/iframe-inside-overflow-clipping.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/mask-with-filter.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/mask-with-small-content-rect.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/nested-border-radius-clipping.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/nested-render-surfaces-with-intervening-clip.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/nested-render-surfaces-with-rotation.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/nested-render-surfaces.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/nested-scrolling.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-clip-with-accelerated-scrolling-ancestor.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-compositing-descendant.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-positioning.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-scroll-background-opaque-to-transparent.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-scroll-background-transparent-to-opaque.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-scroll-with-pointer-events-toggle.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/overflow-scrollbar-layers.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/parent-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/remove-overflow-crash2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/reparented-scrollbars-non-sc-anc.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/resize-painting.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/scaled-mask.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/scaled-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/scroll-ancestor-update.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/scroll-neg-z-index-and-composited-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/scroll-parent-absolute-with-backdrop-filter.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/scroll-parent-absolute.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/scrollbar-layer-placement.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/scrollbar-painting.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/scrollbars-with-clipped-owner.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/scrolling-content-clip-to-viewport.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/siblings-composited-with-border-radius-ancestor-one-clipped.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/siblings-composited-with-border-radius-ancestor.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/siblings-with-border-radius-ancestor.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/textarea-scroll-touch.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/tiled-mask.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/universal-accelerated-overflow-scroll.html [ Failure Timeout ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overflow/zero-size-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overlap-blending/children-opacity-huge.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overlap-blending/children-opacity-no-overlap.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/overlap-blending/reflection-opacity-huge.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/plugins/webplugin-alpha.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/plugins/webplugin-no-alpha.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/plugins/webplugin-reflection.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/animation-inside-reflection.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/backface-hidden-reflection.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/compositing-change-inside-reflection.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/deeply-nested-reflections.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/enable-disable-compositing-reflection.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/load-video-in-reflection.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/masked-reflection-on-composited-huge.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/masked-reflection-on-composited.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/nested-reflection-mask-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/nested-reflection-on-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/nested-reflection-opacity.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/nested-reflection-size-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/nested-reflection-transformed.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/nested-reflection-transformed2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/nested-reflection.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/reflection-in-composited.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/reflection-on-composited.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/reflection-opacity.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/reflection-ordering.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/reflection-positioning.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/reflection-positioning2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/remove-add-reflection.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/simple-composited-reflections.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/reflections/transform-inside-reflection.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/render-surface-alpha-blending.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rendering-contexts.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rounded-corners.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-absolute-overflow-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-absolute-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-absolute.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-and-writing-mode-scrolling.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-fixed-overflow-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-fixed-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-fixed.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-absolute-overflow-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-absolute-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-absolute.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-fixed-overflow-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-fixed-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-fixed.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-relative.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-overflow-scrolling.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/rtl/rtl-relative.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/scrollbars/nested-overlay-scrollbars.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/self-painting-layers.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/self-painting-layers2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/shadows/shadow-drawing.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/sibling-positioning.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/add-remove-squashed-layers.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/clipping-ancestor.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/composited-bounds-for-negative-z.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/do-not-squash-non-self-painting-layer.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/do-not-squash-scroll-child-with-composited-descendants.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/dont-squash-into-iframes.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/dont-squash-into-videos.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/iframes-are-never-squashed.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/invalidations-with-large-negative-margin-inline-content.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/invisible-layers-should-not-affect-geometry.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/move-squashing-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/no-squashing-for-filters.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/no-squashing-into-another-clip-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/no-squashing-into-fixed-position-that-clips.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/opacity-squashed-owner.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/repaint-child-of-squashed.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/selection-repaint-with-gaps.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-above-fixed-1.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-above-fixed-2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-above-fixed-3.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-compositing-hover.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-onto-distant-relative.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-onto-nephew.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-onto-transform-backing.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-paint-invalidation-fixed-position.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-same-transform-ancestor.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-simple.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-three-layers.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-child.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-transformed-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squash-transform.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squashed-clip-parent.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squashed-layer-loses-graphicslayer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squashed-repaints.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squashing-inside-perspective.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squashing-print.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/squashing-sparsity-heuristic.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/squashing/vertical-writing-mode-squashed.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/text-on-large-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/tiled-layers-hidpi.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/transitions/opacity-on-inline.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/transitions/scale-transition-no-start.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/transitions/singular-scale-transition.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/update-paint-phases.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/video-frame-size-change.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/video/video-poster.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/visibility/compositing-and-visibility-turned-off-together.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/visibility/hidden-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/visibility/layer-visible-content.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/visibility/visibility-composited-transforms.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/visibility/visibility-composited.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/visibility/visibility-image-layers-dynamic.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/visibility/visibility-on-distant-descendant.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/webgl/webgl-background-color.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/webgl/webgl-no-alpha.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/webgl/webgl-nonpremultiplied-blend.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/webgl/webgl-reflection.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/webgl/webgl-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/will-change/composited-layers.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/will-change/parse-will-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/z-order/collect-layers-does-not-initialize-pos-z-order-list.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/compositing/z-order/negative-z-index.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/background/background-and-shadow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/background/fieldset-legend-background-shadow-border-radius.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/background/rounded-clip-fractional-offset.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/clipath/clip-path-with-background-and-box-behind.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/float-painted-when-no-longer-self-painting.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/frames/frameset-with-stacking-context-and-not-stacking-context-children.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/frames/frameset-with-stacking-contexts.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/high-contrast-mode/image-filter-all/text-on-backgrounds.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/images/animated-gif-last-frame-crash.html [ Crash ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/inline/focus-ring-under-absolute-with-relative-continuation.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/inline/outline-offset.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/4774354.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/4776765.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/absolute-display-block-to-none.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/absolute-layer-specified-left-or-right-auto-width-moved-vertically.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/absolute-margin-change-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/absolute-position-change-containing-block.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/absolute-position-changed.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/absolute-position-moved.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/abspos-shift-image-incorrect-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/add-table-overpaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/align-content-change-keeping-geometry.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/align-content-change-no-flex.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/align-content-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/align-content-distribution-change-grid.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/align-content-position-change-grid.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/align-items-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/align-items-overflow-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/align-self-change-grid.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/align-self-change-keeping-geometry-grid.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/align-self-change-keeping-geometry.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/align-self-change-no-flex.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/align-self-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/align-self-overflow-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/animated-gif-background.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/animated-gif-transformed-offscreen.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/animated-png-background.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/animated-webp-background.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/background-currentColor-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/background-generated.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-small-document.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/background-misaligned.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/background-resize-height.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/background-shorthand-with-gradient-and-height-changes.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/background-size-auto-with-gradient-and-height-changes.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/backgroundSizeRepaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-float-positioned.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-replaced.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/block-no-inflow-children.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/block-selection-gap-in-table-cell.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/block-selection-gap-stale-cache-2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/block-selection-gap-stale-cache.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/block-shift-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/body-background-image.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/border-current-color.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/border-image-outset-add-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/border-image-outset-change-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/border-outline-0.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/border-radius-repaint-2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/border-radius-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/border-radius-with-outline.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/border-radius-without-border.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/border-repaint-glitch.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/box-inline-resize.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/box-shadow-add-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/box-shadow-change-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/box-shadow-dynamic.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/box-shadow-inset-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/box-sizing-border-keeping-size.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/box-sizing-padding-keeping-size.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/box-sizing.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/bugzilla-3509.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/bugzilla-5699.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/bugzilla-6278.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/bugzilla-6388.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/bugzilla-6473.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/button-inner-no-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/caret-outside-block.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/change-transform.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/child-of-sub-pixel-offset-composited-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/clip-path-constant-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/clip-unclip-and-change.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/clip-with-layout-delta.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/clipped-overflow-visible-subtree.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/clipped-relative.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/column-float-under-stacked-inline.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/column-rules-fixed-height.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/composited-iframe-scroll-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/composited-overflow-with-local-background.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/composited-overflow-with-negative-offset-outline.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/composited-vertical-rl-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/background-attachment-local-composited.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/background-attachment-local-equivalent.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/clipping-should-not-repaint-composited-descendants.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/column-span-under-composited-column-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/composited-document-element.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/composited-float-under-composited-inline.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/compositing-reason-removed.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/containing-block-added.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/containing-block-removed.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/content-into-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/float-under-composited-inline.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/iframe-inside-squashed-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/inline-repaint-container.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/invalidations-on-composited-layers.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/invalidations-with-large-negative-margin.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/layer-repaint-rects.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/layer-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/new-stacking-context.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/opacity-between-absolute.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/opacity-between-absolute2.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/overflow-into-content.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/overlap-test-with-filter.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/page-scale-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/remove-squashed-layer-plus-move.html [ Crash ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/repaint-overflow-scrolled-squashed-content.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/repaint-squashed-layer-in-rect.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/repaint-via-layout-offset.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/resize-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/resize-squashing-layer-that-needs-full-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/scroll-fixed-layer-no-content.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/scroll-fixed-layer-out-of-view.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/scroll-fixed-squahed-layer.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/scrolling-without-painting.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/should-invoke-deferred-compositing.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-descendants-on-overflow-change.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-descendants.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-filter.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-opacity.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-transform.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-z-index.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-scrolling-contents-outline-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/shrink-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/squashing-inside-preserve-3d-element.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/stacked-float-under-composited-inline.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/subpixel-offset-scaled-transform-composited.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/text-color-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/tricky-element-removal-crash.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/updating-scrolling-container-and-content.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/updating-scrolling-container.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/compositing/updating-scrolling-content.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/containing-block-position-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/content-into-overflow.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/continuation-after-outline.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/control-clip.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/crbug-371640-2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/crbug-371640-3.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/crbug-371640-4.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/crbug-371640.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/create-layer-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/css-clip-change-stacking-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-element-change-columns-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-element-change-rows-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-item-change-column-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-item-change-row-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-item-z-index-change-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/destroy-composited-scrollbar.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/destroy-overlay-scrollbar.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/destroy-scrollbar.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/details-open-repaint.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/do-not-paint-below-image-baseline.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/dont-invalidate-root-layer-when-composited-layer-becomes-visible.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/dynamic-table-vertical-alignment-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/erase-overflow.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filter-invalidation-after-display.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filter-invalidation-positioned-child.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filter-invalidation-with-composited-container-change.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filter-on-html-element-with-fixed-position-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filter-repaint-accelerated-child-with-filter-child.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filter-repaint-accelerated-on-accelerated-filter.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filter-repaint-on-accelerated-layer.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-1.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-2.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-3.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-4.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-5.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-6.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-displacement.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-gaussianblur-xonly.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-gaussianblur-yonly.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-gaussianblur.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-lighting.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-merge.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-morphology-xonly.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-morphology-yonly.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-morphology.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-offset.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-after-scroll.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-and-absolute-position-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-child-move-after-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-fixed-move-after-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-transformed-move-after-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-transformed-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-descendant-of-transformed-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-element-repaint-after-compositing-update.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-margin-change-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-move-after-keyboard-scroll.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-move-after-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-position-layer-moved.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-position-transparency-with-overflow.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-scale.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-scroll-simple.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-table-cell.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-table-overflow-zindex.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-table-overflow.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-to-relative-position-with-absolute-child.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-tranformed.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-under-composited-absolute-scrolled.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-under-composited-fixed-scrolled.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed-with-border-under-composited-absolute-scrolled.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/fixed.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-column-reverse.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-during-resize-no-flex.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-on-layout.html [ Crash ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-on-margin-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-opacity-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-rtl-column.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/flexbox/scrollbars-changed.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/flipped-blocks-writing-mode-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/float-in-new-block-with-layout-delta.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/float-move-during-layout.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/float-new-in-block.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/float-overflow-right.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/float-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/focus-continuations.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/focus-layers.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-child-move.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-continuation-move.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-inline-continuation-move.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/focus-ring.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/forms/radio-focus-by-mouse-then-keydown.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/gradients-em-stops-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/hover-pseudo-borders-whitespace.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/hover-pseudo-borders.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/iframe-rounding.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/iframe-scroll-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/in-scaled-iframe.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/inline-block-resize.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/inline-focus.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/inline-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/inline-reflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/inline-relative-positioned.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/inline-style-change-in-scrolled-view.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/inline-vertical-lr-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/inline-vertical-rl-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/input-overflow-in-table.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/insert-frame.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/intermediate-layout-position-clip.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/intermediate-layout-position.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-after-composited-scroll-of-window.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-after-composited-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-box-shadow-currentColor.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-descendants-when-receiving-paint-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-invisible-element.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-paint-for-fixed-pos-inside-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidate-paint-in-iframe-in-composited-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidation-on-foreground-graphics-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidation-with-scale-transform.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invalidation-with-zero-size-object.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/invisible-objects.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/justify-content-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/justify-content-distribution-change-grid.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/justify-content-position-change-grid.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/justify-content-position-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/justify-items-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/justify-items-legacy-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/justify-items-overflow-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/justify-self-change-keeping-geometry.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/justify-self-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/justify-self-overflow-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/layer-child-outline.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/layer-full-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/layer-hide-when-needs-layout.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/layer-outline.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/layer-visibility.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/layout-state-only-positioned.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/layout-state-relative.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset3.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/line-in-scrolled-clipped-block.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/line-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/lines-with-layout-delta.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/list-marker-2.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/list-marker.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/make-children-non-inline.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/margin.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/mask-clip-change-stacking-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/media-audio-no-spurious-repaints.html [ Crash ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/mix-blend-mode-separate-stacking-context.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multi-subsequence-composited.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multi-subsequence-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multicol-as-paint-container.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multicol-nested.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multicol-relpos-with-abspos.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-in-relpos.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multicol-with-block.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multicol-with-overflowing-block-rl.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multicol-with-relpos.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multicol-with-text.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/multiple-backgrounds-style-change.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/negative-shadow-box-expand.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/negative-shadow-box-shrink.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/negative-text-indent-with-overflow-hidden.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/nested-fixed-iframe-scrolled.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/no-caret-repaint-in-non-content-editable-element.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/offset-change-wrong-invalidation-with-float.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/opacity-change-on-overflow-float.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-add-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-become-affected-by-descendant.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-become-not-affected-by-descendant.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-change-continuations.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-change-invalidation.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-change-offset.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-change-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-child-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-clip-change.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-containing-image-in-non-standard-mode.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-continuations.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-current-color.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-inset.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-not-affected-by-descendant.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-repaint-glitch.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/outline-shrinking.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-auto-in-overflow-auto-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-changed-on-child-of-composited-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-clip-subtree-layout.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-delete-line.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-flipped-writing-mode-block.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-flipped-writing-mode-table.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-in-overflow-hidden-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-to-visible.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-yet-scrolled-with-custom-scrollbar.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-yet-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-hide.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-into-content.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-move-after-scroll.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-outline-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-after-move.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-composited-non-stacking-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-in-overflow-scroll-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-local-background-text-color-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overflow-show.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/overhanging-float-detach-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/padding-border-keeping-border-box-and-content-box.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/padding-keeping-content-size.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/padding-keeping-visual-size.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/paint-caret-in-div-with-negative-indent.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/paint-invalidation-with-opacity.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/position-change-keeping-geometry.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/positioned-document-element.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/positioned-great-grandparent-change-location.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/positioned-list-offset-change-repaint.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/push-block-with-first-line.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/quotes.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/reflection-invalidation-after-display.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/reflection-invalidation-positioned-child.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/reflection-repaint-test.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/rel-positioned-inline-with-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/relative-inline-positioned-movement-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/relative-margin-change-repaint.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/relative-positioned-movement-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/relayout-fixed-position-after-scale.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/remove-block-after-layout.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/remove-inline-after-layout.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/remove-inline-block-descendant-of-flex.html [ Crash ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/remove-inline-layer-after-layout.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/repaint-composited-child-in-scrolled-container.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/repaint-descandant-on-ancestor-layer-move.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll.html [ Timeout ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/repaint-in-iframe.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/repaint-on-style-change.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/repaint-resized-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/repaint-subrect-grid.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/repaint-svg-after-style-change.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/repaint-table-row-in-composited-document.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/repaint-tile-clipped.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/requestAnimation-translation-leave-traces.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/resize-child-within-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-div.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/resize-skewed.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/resize-with-border-clipped.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/resize-with-border.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/rotated-subpixel.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/ruby-flipped-blocks.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scroll-absolute-layer-with-reflection.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-no-visible-content.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-reflection.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-transformed-parent-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-reflected-layer.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scroll-in-clipped-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scroll-in-fixed-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scroll-in-transformed-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scroll-inside-table-cell.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scroll-relative-table-inside-table-cell.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scroll-with-transformed-parent-layer.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scrollbar-damage-and-full-viewport-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scrollbar-invalidation-on-resize-with-border.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scrollbar-invalidation-on-resize.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scrollbar-parts.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/scrolled-iframe-scrollbar-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/search-field-cancel.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/select-option-background-color.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selected-replaced.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection-after-delete.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection-after-remove.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection-change-in-iframe-with-relative-parent.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection-clear.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection-rl.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-with-br-includes-newline.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-composited-scrolling-container.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/selection/selection-within-composited-scroller.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/shadow-box-resize-writing-mode.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/shadow-box-resize.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/shadow-multiple.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-addition.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal.html [ Crash ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/slider-thumb-drag-release.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/slider-thumb-float.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/stacking-context-lost.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/static-to-positioned.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/subpixel-offset-scaled-transform.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/subpixel-shadow-included-in-invalidation.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/subtree-layoutstate-transform.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip-2.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip-3.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped.html [ Crash Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg-layout-root-style-attr-update.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/add-background-property-on-root.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/add-outline-property-on-root.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html.xhtml [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-same-image.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-transformed-offscreen.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-1.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/embedded-svg-size-changes.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/foreign-object-repaint.svg [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/hit-test-with-br.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/overflow-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/remove-background-property-on-root.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/remove-outline-property-on-root.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/repaint-moving-svg-and-div.xhtml [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/resize-svg-invalidate-children.html [ Crash ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/scroll-hit-test.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size.xhtml [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/transform-focus-ring-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/transform-foreign-object.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/use-instanceRoot-event-bubbling.xhtml [ Timeout ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/use-setAttribute-crash.svg [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/svg/zoom-foreignObject.svg [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-cell-collapsed-border.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-cell-move.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-cell-overflow.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-cell-vertical-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-collapsed-border.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-extra-bottom-grow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-overflow-auto-in-overflow-auto-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-overflow-scroll-in-overflow-scroll-scrolled.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-row.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-section-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-section-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-shrink-row-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-two-pass-layout-overpaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-writing-modes-h.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table-writing-modes-v.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table/cached-cell-append.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-border-width.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-sl-border-color.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table/cached-change-col-border-width.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table/cached-change-colgroup-border-width.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table/cached-change-row-border-width.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table/cached-change-tbody-border-width.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table/collapsed-border-cell-resize.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/table/resize-table-row-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/text-append-dirty-lines.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/text-emphasis-h.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/text-emphasis-v.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/text-in-relative-positioned-inline.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/text-match-document-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/text-match-pre-wrapped-text.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-2.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/text-shadow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/trailing-floats-root-line-box-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/transform-absolute-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/transform-absolute-in-positioned-container.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/transform-disable-layoutstate.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/transform-inline-layered-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/transform-layout-repaint.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/transform-relative-position.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/transform-repaint-descendants.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/transform-replaced-shadows.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/transform-rotate-and-remove.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/transform-translate.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/update-visual-rects-after-compositing-change.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/vertical-align-length1.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/vertical-align-length2.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/vertical-align1.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/vertical-align2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-child.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-parent.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-same.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/vertical-rl-as-paint-container.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/vertical-rl-overflow.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/view-background-from-body-2.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/viewport-gradient-background-html-resize.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/window-resize-centered-inline-under-fixed-pos.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/window-resize-frameset.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/window-resize-percent-html.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/window-resize-percent-width-height.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/window-resize-positioned-bottom.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/window-resize-positioned-percent-top.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/window-resize-vertical-writing-mode.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/invalidation/window-resize-viewport-percent.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/masks/fieldset-mask.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/overflow/non-composited-fixed-position-descendant.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/pagination/pagination-change-clip-crash.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/printing/print-box-shadow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/roundedrects/circle-with-shadow.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/roundedrects/input-with-rounded-rect-and-shadow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/drag-caret.html [ Crash ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-editing-crash.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-rtl.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-inline-block.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-newline-across-blocks.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-newline-br.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-newline-clipped-by-overflow.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-newline-span-across-line.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-newline-span.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-newline-vertical-lr.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-newline-vertical-rl.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-newline.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/selection/text-selection-with-composition.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-125.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-150.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-175.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-200.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-250.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/spellmarkers/document-markers.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/spellmarkers/grammar-markers-hidpi.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/spellmarkers/grammar-markers.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/spellmarkers/inline-spelling-markers-hidpi-composited.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/spellmarkers/inline-spelling-markers-hidpi.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/spellmarkers/inline_spelling_markers.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/tables/collapsed-border-corner-conflict.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/tables/composited-collapsed-table-borders.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/text/selection-no-clip-text.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/text/text-match-highlights-big-line-height.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/theme/adjust-progress-bar-size.html [ Failure Pass ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/transforms/percentage-transform-fractional-box-size.html [ Failure ]
-crbug.com/591099 virtual/disable-spinvalidation/paint/transparency/compositing-alpha-fold-crash.html [ Failure ]
+crbug.com/591099 virtual/android/fast/rootscroller/set-root-scroller.html [ Failure ]
 crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/2d.composite.globalAlpha.fillPath.html [ Crash ]
 crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/2d.fillText.gradient.html [ Crash ]
 crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/2d.text.draw.fill.maxWidth.gradient.html [ Crash ]
@@ -22283,6 +21304,7 @@
 crbug.com/591099 virtual/prefer_compositing_to_lcd_text/scrollbars/viewport-scrollbar-corner-with-percent-padding-crash.html [ Failure ]
 crbug.com/591099 virtual/rootlayerscrolls/fast/history/scroll-restoration/scroll-restoration-fragment-navigation-crossdoc.html [ Crash ]
 crbug.com/591099 virtual/rootlayerscrolls/fast/history/scroll-restoration/scroll-restoration-navigation.html [ Crash ]
+crbug.com/591099 virtual/rootlayerscrolls/fast/rootscroller/set-root-scroller.html [ Failure ]
 crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/abspos-relayout-overflow-style-change.html [ Failure ]
 crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/content-box-smaller-than-scrollbar.html [ Crash ]
 crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/custom-scrollbar-style-applied.html [ Failure ]
@@ -22307,7 +21329,6 @@
 crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrollbar-tickmarks-hittest.html [ Failure Timeout ]
 crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrolling-apis-nan-scroll-position.html [ Failure ]
 crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/scrolling-apis-subpixel.html [ Failure ]
-crbug.com/591099 virtual/rootlayerscrolls/fast/scrolling/set-root-scroller.html [ Failure ]
 crbug.com/591099 virtual/rootlayerscrolls/scrollbars/auto-scrollbar-fades-out.html [ Failure ]
 crbug.com/591099 virtual/rootlayerscrolls/scrollbars/auto-scrollbar-fit-content.html [ Failure ]
 crbug.com/591099 virtual/rootlayerscrolls/scrollbars/basic-scrollbar.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService b/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService
index f572803..47bee8c 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService
@@ -334,6 +334,28 @@
 Bug(none) external/wpt/css/css-grid-1/alignment/grid-content-distribution-018.html [ Failure Timeout ]
 Bug(none) external/wpt/css/css-shapes-1/shape-outside/shape-box/shape-outside-box-003.html [ Failure Timeout ]
 Bug(none) external/wpt/css/css-shapes-1/shape-outside/values/shape-outside-ellipse-004.html [ Failure Timeout ]
+Bug(none) external/wpt/css-paint-api/paint2d-zoom.html [ Crash Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-001.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-002.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-003.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-004.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-005.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-006.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-007.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-008.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-009.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-010.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-011.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-012.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-013.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-014.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-015.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-016.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/parse-input-arguments-017.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/registered-properties-in-custom-paint.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/style-background-image.html [ Timeout ]
+Bug(none) external/wpt/css-paint-api/style-before-pseudo.html [ Crash Pass Timeout ]
+Bug(none) external/wpt/css-paint-api/style-first-letter-pseudo.html [ Timeout ]
 Bug(none) external/wpt/cssom-view/scrolling-quirks-vs-nonquirks.html [ Failure Timeout ]
 Bug(none) external/wpt/cssom-view/scrollingElement.html [ Failure Timeout ]
 Bug(none) external/wpt/custom-elements/custom-element-registry/per-global.html [ Failure Timeout ]
@@ -1908,13 +1930,6 @@
 Bug(none) http/tests/csspaint/invalidation-background-image.html [ Failure ]
 Bug(none) http/tests/csspaint/invalidation-border-image.html [ Failure ]
 Bug(none) http/tests/csspaint/invalidation-content-image.html [ Crash Failure ]
-Bug(none) http/tests/csspaint/paint2d-zoom.html [ Crash Timeout ]
-Bug(none) http/tests/csspaint/parse-input-arguments.html [ Timeout ]
-Bug(none) http/tests/csspaint/registerPaint.html [ Timeout ]
-Bug(none) http/tests/csspaint/registered-properties-in-custom-paint.html [ Timeout ]
-Bug(none) http/tests/csspaint/style-background-image.html [ Timeout ]
-Bug(none) http/tests/csspaint/style-before-pseudo.html [ Crash Pass Timeout ]
-Bug(none) http/tests/csspaint/style-first-letter-pseudo.html [ Timeout ]
 Bug(none) http/tests/dom/create-contextual-fragment-from-bodyless-svg-document-range.html [ Timeout ]
 Bug(none) http/tests/download/basic-ascii.html [ Crash ]
 Bug(none) http/tests/download/literal-utf-8.html [ Crash ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2
index 0b7bc33..ffcbead 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2
@@ -72,7 +72,6 @@
 
 Bug(none) virtual/android/ [ Skip ]
 Bug(none) virtual/color_space/ [ Skip ]
-Bug(none) virtual/disable-spinvalidation/ [ Skip ]
 Bug(none) virtual/display_list_2d_canvas/ [ Skip ]
 Bug(none) virtual/documentwriteevaluator/ [ Skip ]
 Bug(none) virtual/enable_asmjs/ [ Skip ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/root-layer-scrolls b/third_party/WebKit/LayoutTests/FlagExpectations/root-layer-scrolls
index eebb501..755bfcbd 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/root-layer-scrolls
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/root-layer-scrolls
@@ -1281,986 +1281,6 @@
 Bug(none) transforms/2d/transform-fixed-container.html [ Failure ]
 Bug(none) transforms/selection-bounds-in-transformed-view.html [ Failure ]
 Bug(none) transforms/transformed-document-element.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/absolute-inside-out-of-view-fixed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/background-color/background-color-outside-document.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/checkerboard.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/clip-child-by-non-stacking-ancestor.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/columns/composited-in-paginated.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/composite-scrollable-fixed-position-when-descendants-composite.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/contents-opaque/background-clip.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/contents-opaque/background-color.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/contents-opaque/body-background-painted.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/contents-opaque/body-background-skipped.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/contents-opaque/filter.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/contents-opaque/hidden-with-visible-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/contents-opaque/hidden-with-visible-text.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/contents-opaque/layer-opacity.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/contents-opaque/layer-transform.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/contents-opaque/overflow-hidden-child-layers.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/contents-opaque/visibility-hidden.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/culling/filter-occlusion-alpha-large.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/direct-image-compositing.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/draws-content/canvas-background-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/draws-content/webgl-background-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/filters/sw-layer-overlaps-hw-shadow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/filters/sw-shadow-overlaps-hw-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/filters/sw-shadow-overlaps-hw-shadow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/fixed-background-after-style-recalc.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/fixed-background-composited-html.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/fixed-background-negative-z-index-fixed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/fixed-body-background-positioned.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/fixed-position-changed-to-absolute.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/force-compositing-mode/force-composite-empty.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/force-compositing-mode/no-overflow-iframe-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/force-compositing-mode/overflow-hidden-iframe-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/force-compositing-mode/overflow-iframe-enter-compositing.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/force-compositing-mode/overflow-iframe-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/ancestor-overflow-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/bounds-clipped-composited-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/bounds-ignores-hidden-composited-descendant.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/bounds-ignores-hidden-dynamic.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/bounds-ignores-hidden.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/clip.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/clip-inside.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/clip-with-shadow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/composited-in-columns.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/fixed-in-composited.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/fixed-position.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/flipped-writing-mode.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/foreground-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/horizontal-scroll-composited.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/layer-due-to-layer-children-deep-switch.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/layer-due-to-layer-children-switch.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/limit-layer-bounds-opacity-transition.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/limit-layer-bounds-overflow-root.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/limit-layer-bounds-positioned.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/limit-layer-bounds-positioned-transition.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/limit-layer-bounds-transformed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/preserve-3d-switching.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/vertical-scroll-composited.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/geometry/video-fixed-scrolling.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-1-iframe-composited-scrolled-late-noncomposite.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-1-iframe.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-1-iframe-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-2-iframe-composited-inner.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-2-iframe-composited-outer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-2-iframe.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-inner-late-composite.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-2-iframe-scrolled-outer-late-composite.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/become-composited-nested-iframes.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/become-overlapped-iframe.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/composited-iframe-alignment.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/composited-iframe-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/composited-parent-iframe.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/connect-compositing-iframe2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/connect-compositing-iframe3.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/connect-compositing-iframe-delayed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/connect-compositing-iframe.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/enter-compositing-iframe.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/iframe-composited-scrolling-hide-and-show.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/iframe-content-flipping.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/iframe-copy-on-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/iframe-in-composited-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/iframe-resize.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/iframe-size-from-zero.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/invisible-nested-iframe-hide.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/invisible-nested-iframe-show.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/nested-iframe-scrolling.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/overlapped-iframe.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/overlapped-iframe-iframe.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/overlapped-nested-iframes.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/resizer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/scrolling-iframe.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/iframes/visibility-hidden-transformed-content.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/images/clip-on-directly-composited-image.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/images/direct-image-dynamic-border-draws-content.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/animation-overlap-with-children.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/assumed-overlap-for-inline-transform.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-and-transform.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-change-out-of-view-in-view.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-in-fixed-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-no-content.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-body.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-body-overlap.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view-positioning.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view-scaled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-under-transform.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/iframe-background-attachment-fixed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/no-compositing-for-fixed-position-under-transform.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/no-compositing-for-preserve-3d.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/no-main-thread-scrolling-for-non-composited-fixed-position-without-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/overflow-scroll-overlap.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/overlap-animation-clipping.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/overlap-animation-container.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/overlap-animation.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/overlap-child-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/overlap-clipping.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/overlap-transformed-3d.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/overlap-transformed-and-clipped.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/overlap-transformed-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/overlap-transformed-layer-with-transform-body.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/overlap-transformed-preserved-3d.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/overlap-transforms.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/remove-clipping-layer-with-no-children.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/rotate3d-overlap.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/scroll-partial-update.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/spanOverlapsCanvas.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/stacking-context-overlap.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/stacking-context-overlap-nested.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/translatez-added.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/translatez-overlap.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/layer-creation/translatez-removed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/masks/mask-layer-size.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/clear-scroll-parent.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/clip-descendents.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/composited-scrolling-paint-phases.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/composited-scroll-overlap-test.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/content-gains-scrollbars.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/content-loses-scrollbars.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/fixed-position-ancestor-clip.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/nested-render-surfaces-with-intervening-clip.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/nested-render-surfaces-with-rotation.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/overflow-auto-with-touch.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/overflow-auto-with-touch-no-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/overflow-auto-with-touch-toggle.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/overflow-hidden-with-touch.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/overflow-overlay-with-touch.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/overflow-overlay-with-touch-no-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/overflow-scrollbar-layers.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/overflow-scroll-with-touch-no-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/overflow-visible-with-touch.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/reparented-scrollbars-non-sc-anc.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/resize-painting.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/scrollbar-layer-placement.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/scrolling-content-clip-to-viewport.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/scroll-parent-absolute.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/scroll-parent-absolute-with-backdrop-filter.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/textarea-scroll-touch.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/tiled-mask.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/universal-accelerated-overflow-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rendering-contexts.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-absolute.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-absolute-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-absolute-overflow-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-fixed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-fixed-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-fixed-overflow-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-absolute.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-absolute-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-absolute-overflow-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-fixed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-fixed-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-fixed-overflow-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-iframe-relative.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-overflow-invalidation.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/rtl/rtl-relative.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/scrollbars/nested-overlay-scrollbars.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/add-remove-squashed-layers.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/clipping-ancestor.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/composited-bounds-for-negative-z.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/do-not-squash-non-self-painting-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/dont-squash-into-animated-layers.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/dont-squash-into-blend-mode.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/dont-squash-into-iframes.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/dont-squash-into-videos.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/dont-squash-with-scale-transform.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/iframes-are-never-squashed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/invalidations-with-large-negative-margin-inline-content.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/invisible-layers-should-not-affect-geometry.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/move-squashing-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/no-squashing-for-filters.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/no-squashing-into-another-clip-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/no-squashing-into-fixed-position-that-clips.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/opacity-squashed-owner.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/repaint-child-of-squashed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/selection-repaint-with-gaps.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-above-fixed-1.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-above-fixed-2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-above-fixed-3.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-compositing-hover.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squashed-layer-loses-graphicslayer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squashed-repaints.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squashing-inside-perspective.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squashing-print.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squashing-sparsity-heuristic.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-onto-distant-relative.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-onto-nephew.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-onto-transform-backing.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-paint-invalidation-fixed-position.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-same-transform-ancestor.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-simple.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-three-layers.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-transform.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-transformed-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/tiled-layers-hidpi.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/update-paint-phases.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/video/video-poster.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/visibility/layer-visible-content.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/visibility/visibility-image-layers-dynamic.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/will-change/composited-layers.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/compositing/will-change/will-change-contents-suppresses-compositing.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/frames/frameset-with-stacking-context-and-not-stacking-context-children.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/frames/frameset-with-stacking-contexts.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/4776765.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/absolute-display-block-to-none.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/absolute-margin-change-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/absolute-position-change-containing-block.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/absolute-position-changed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/absolute-position-moved.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/abspos-shift-image-incorrect-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/add-table-overpaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/align-content-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/align-content-change-keeping-geometry.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/align-content-change-no-flex.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/align-content-distribution-change-grid.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/align-content-position-change-grid.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/align-items-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/align-items-overflow-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/align-self-change-grid.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/align-self-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/align-self-change-keeping-geometry-grid.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/align-self-change-keeping-geometry.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/align-self-change-no-flex.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/align-self-overflow-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/animated-gif-background.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/animated-gif-background-offscreen-firstline.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/animated-gif-background-offscreen.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/animated-gif.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/animated-gif-offscreen.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/animated-gif-transformed-offscreen.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/animated-png-background.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/animated-png.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/animated-png-offscreen.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/animated-webp-background.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/animated-webp.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/animated-webp-offscreen.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/background-currentColor-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/background-generated.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/background-misaligned.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/background-resize-height.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/background-shorthand-with-gradient-and-height-changes.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/background-size-auto-with-gradient-and-height-changes.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/backgroundSizeRepaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-float-positioned.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-replaced.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/block-no-inflow-children.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/block-shift-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/body-background-image.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/border-current-color.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/border-image-outset-add-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/border-image-outset-change-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/border-outline-0.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/border-radius-repaint-2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/border-radius-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/border-radius-without-border.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/border-radius-with-outline.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/border-repaint-glitch.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/box-inline-resize.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/box-shadow-add-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/box-shadow-change-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/box-shadow-dynamic.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/box-shadow-inset-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/box-sizing-border-keeping-size.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/box-sizing.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/box-sizing-padding-keeping-size.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/bugzilla-3509.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/bugzilla-5699.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/bugzilla-6278.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/bugzilla-6388.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/bugzilla-6473.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/button-inner-no-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/button-spurious-layout-hint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/canvas-putImageData.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/canvas-resize.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/canvas-resize-no-full-invalidation.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/caret-outside-block.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/caret-subpixel.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/change-transform.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/child-of-sub-pixel-offset-composited-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/clip-path-constant-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/clipped-overflow-visible-subtree.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/clipped-relative.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/clip-unclip-and-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/clip-with-layout-delta.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/column-rules-fixed-height.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/composited-iframe-scroll-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/composited-overflow-with-local-background.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/composited-overflow-with-negative-offset-outline.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/composited-table-row.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/composited-vertical-rl-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/background-attachment-local-composited.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/background-attachment-local-equivalent.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/clipping-should-not-repaint-composited-descendants.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/column-span-under-composited-column-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/composited-float-under-composited-inline.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/compositing-reason-removed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/containing-block-added.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/containing-block-removed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/float-under-composited-inline.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/iframe-inside-squashed-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/invalidations-on-composited-layers.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/invalidations-with-large-negative-margin.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/new-stacking-context.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/overlap-test-with-filter.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/page-scale-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/remove-squashed-layer-plus-move.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/repaint-overflow-scrolled-squashed-content.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/repaint-squashed-layer-in-rect.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/repaint-via-layout-offset.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/resize-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/resize-squashing-layer-that-needs-full-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/scroll-fixed-layer-no-content.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/scroll-fixed-layer-out-of-view.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/scroll-fixed-squahed-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/scrolling-without-painting.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/should-invoke-deferred-compositing.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-descendants.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-descendants-on-overflow-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-filter.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-opacity.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-transform.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-z-index.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-scrolling-contents-outline-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/squashing-inside-preserve-3d-element.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/stacked-float-under-composited-inline.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/subpixel-offset-scaled-transform-composited.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/text-color-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/text-match-highlight.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/tricky-element-removal-crash.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/updating-scrolling-container-and-content.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/updating-scrolling-container.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/compositing/updating-scrolling-content.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/containing-block-position-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/content-into-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/control-clip.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/crbug-371640-2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/crbug-371640-3.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/crbug-371640-4.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/crbug-371640.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/create-layer-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-element-change-columns-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-element-change-rows-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-item-change-column-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-item-change-row-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-item-z-index-change-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/destroy-composited-scrollbar.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/destroy-overlay-scrollbar.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/destroy-scrollbar.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/details-open-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/document-flipped-blocks-writing-mode-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/do-not-paint-below-image-baseline.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/dont-invalidate-root-layer-when-composited-layer-becomes-visible.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/dynamic-table-vertical-alignment-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/empty-object-move-and-resize.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/erase-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filter-invalidation-after-display.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filter-invalidation-positioned-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filter-invalidation-with-composited-container-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filter-on-html-element-with-fixed-position-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filter-repaint-accelerated-child-with-filter-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filter-repaint-accelerated-on-accelerated-filter.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filter-repaint-on-accelerated-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-1.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-3.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-4.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-5.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-6.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-displacement.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-gaussianblur.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-gaussianblur-xonly.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-gaussianblur-yonly.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-lighting.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-merge.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-morphology.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-morphology-xonly.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-morphology-yonly.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/filters/effect-reference-repaint-offset.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-after-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-and-absolute-position-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-child-move-after-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-fixed-move-after-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-transformed-move-after-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-transformed-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-descendant-of-transformed-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-element-repaint-after-compositing-update.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-img-src-change-after-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-margin-change-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-move-after-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-position-transparency-with-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-scale.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-scroll-simple.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-table-cell.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-table-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-table-overflow-zindex.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-to-relative-position-with-absolute-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-tranformed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-under-composited-absolute-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-under-composited-fixed-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/fixed-with-border-under-composited-absolute-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-column-reverse.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-during-resize-no-flex.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-on-layout.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-on-margin-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-opacity-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-rtl-column.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/flexbox/scrollbars-changed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/flipped-blocks-writing-mode-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/float-in-new-block-with-layout-delta.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/float-move-during-layout.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/float-new-in-block.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/float-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/float-overflow-right.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/focus-continuations.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-child-move.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-continuation-move.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-inline-continuation-move.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/forms/radio-focus-by-mouse-then-keydown.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/full-viewport-repaint-for-background-attachment-fixed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/gradients-em-stops-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/hover-pseudo-borders.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/hover-pseudo-borders-whitespace.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/iframe-rounding.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/iframe-scrollbar-hover.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/iframe-scroll-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/image-resize.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/inline-block-resize.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/inline-color-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/inline-focus.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/inline-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/inline-reflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/inline-relative-positioned.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/inline-style-change-in-scrolled-view.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/inline-vertical-lr-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/inline-vertical-rl-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/input-overflow-in-table.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/in-scaled-iframe.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/insert-frame.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/intermediate-layout-position-clip.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/intermediate-layout-position.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidate-after-composited-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidate-after-composited-scroll-of-window.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidate-box-shadow-currentColor.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidate-cell-in-row-with-offset.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidate-descendants-when-receiving-paint-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidate-invisible-element.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidate-paint-for-fixed-pos-inside-iframe.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidate-paint-in-iframe-in-composited-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidation-on-foreground-graphics-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidation-with-scale-transform.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invalidation-with-zero-size-object.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/invisible-objects.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/justify-content-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/justify-content-distribution-change-grid.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/justify-content-position-change-grid.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/justify-content-position-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/justify-items-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/justify-items-legacy-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/justify-items-overflow-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/justify-self-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/justify-self-change-keeping-geometry.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/justify-self-overflow-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/layer-full-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/layer-hide-when-needs-layout.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/layer-visibility.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/layout-state-only-positioned.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/layout-state-relative.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset3.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/line-in-scrolled-clipped-block.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/line-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/lines-with-layout-delta.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/list-marker-2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/make-children-non-inline.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/margin.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/media-audio-no-spurious-repaints.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/mix-blend-mode-separate-stacking-context.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/multicol-as-paint-container.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/multicol-relpos-with-abspos.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/multicol-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/multicol-resize-with-rule.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-in-relpos.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/multicol-with-block.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/multicol-with-inline.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/multicol-with-overflowing-block-rl.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/multicol-with-relpos.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/multicol-with-text.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/multiple-backgrounds-style-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/negative-shadow-box-expand.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/negative-shadow-box-shrink.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/negative-text-indent-with-overflow-hidden.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/nested-fixed-iframe-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/nested-iframe-scroll-inner.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/nested-iframe-scroll-outer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/no-caret-repaint-in-non-content-editable-element.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/non-text-link-invalidation-optimization.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/offset-change-wrong-invalidation-with-float.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/opacity-change-on-overflow-float.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-add-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-become-affected-by-descendant.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-become-not-affected-by-descendant.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-change-continuations.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-change-invalidation.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-change-offset.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-change-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-child-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-clip-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-containing-image-in-non-standard-mode.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-continuations.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-current-color.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-inset.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-not-affected-by-descendant.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-repaint-glitch.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/outline-shrinking.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-auto-in-overflow-auto-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-changed-on-child-of-composited-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-clip-subtree-layout.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-delete-line.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-flipped-writing-mode-block.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-flipped-writing-mode-table.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-in-overflow-hidden-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-yet-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-yet-scrolled-with-custom-scrollbar.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-hide.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-into-content.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-move-after-scroll.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-after-move.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-composited-non-stacking-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-in-overflow-scroll-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-local-background-text-color-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overflow-show.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/overhanging-float-detach-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/padding-border-keeping-border-box-and-content-box.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/padding-keeping-content-size.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/padding-keeping-visual-size.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/paint-caret-in-div-with-negative-indent.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/paint-invalidation-with-opacity.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/percent-size-image-resize-container.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/position-change-keeping-geometry.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/positioned-document-element.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/positioned-great-grandparent-change-location.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/positioned-list-offset-change-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/push-block-with-first-line.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/quotes.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/reflection-invalidation-after-display.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/reflection-invalidation-positioned-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/reflection-redraw.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/reflection-repaint-test.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/relative-inline-positioned-movement-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/relative-margin-change-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/relative-positioned-movement-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/relayout-fixed-position-after-scale.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/rel-positioned-inline-with-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/remove-block-after-layout.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/remove-inline-after-layout.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/remove-inline-block-descendant-of-flex.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/remove-inline-layer-after-layout.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/repaint-composited-child-in-scrolled-container.html [ Timeout Failure Failure Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/repaint-descandant-on-ancestor-layer-move.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/repaint-in-iframe.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/repaint-on-style-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/repaint-resized-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/repaint-subrect-grid.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/repaint-table-row-in-composited-document.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/requestAnimation-translation-leave-traces.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/resize-child-within-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-div.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/resize-skewed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/resize-with-border-clipped.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/resize-with-border.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/ruby-flipped-blocks.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scroll-absolute-layer-with-reflection.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scrollbar-damage-and-full-viewport-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scrollbar-invalidation-on-resize.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scrollbar-invalidation-on-resize-with-border.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scrollbar-parts.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scrolled-iframe-scrollbar-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-no-visible-content.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-reflection.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-transformed-parent-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-reflected-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scroll-in-clipped-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scroll-in-fixed-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scroll-inside-table-cell.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scroll-in-transformed-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scroll-relative-table-inside-table-cell.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/scroll-with-transformed-parent-layer.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/search-field-cancel.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selected-replaced.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection-after-delete.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection-after-remove.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection-change-in-iframe-with-relative-parent.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection-clear-after-move.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection-clear.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-with-br-includes-newline.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection-rl.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-composited-scrolling-container.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/selection/selection-within-composited-scroller.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/select-option-background-color.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/set-text-content-same.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/shadow-box-resize.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/shadow-box-resize-writing-mode.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-addition.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/stacking-context-lost.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/static-to-positioned.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/subpixel-offset-scaled-transform.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/subpixel-shadow-included-in-invalidation.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/subtree-layoutstate-transform.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip-2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip-3.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-document-no-scrollbars.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/add-background-property-on-root.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/add-border-property-on-root.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/add-outline-property-on-root.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-background-offscreen.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-offscreen.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-transformed-offscreen.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/animate-fill.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/animate-target-id-changed.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/append-text-node-to-tspan.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/change-background-color.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/circle-move-invalidation.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/clip-path-child-changes.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/clip-path-href-changes.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/clip-path-id-changes.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/clip-path-units-changes.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/color-fill-currentColor-and-css.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/container-repaint.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/deep-dynamic-updates.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-1.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/ems-display-none.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/exs-display-none.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/fecomponenttransfer-in1-change.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-change-target-id.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-multiple-targets-id-change.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-reference-invalidation.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-remove-target.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-add-to-document.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-attribute-change.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-2.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-changes-id.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-id-change.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-inline-style-change.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-property-change.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-reappend-to-document.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-remove-from-document.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-style-change.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/fill-opacity-update.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/filter-child-repaint.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/filter-refresh.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/filter-width-update.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/focus-element.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/foreignObject-crash-on-hover.xml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/foreign-object-repaint.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/gradient-add-stops.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/gradient-stop-style-change.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/hairline-stroke-squarecap.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/image-href-change.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/image-with-clip-path.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewBox-contract.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewBox.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/invalidate-on-child-layout.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-and-object-creation.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-creation.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-creation.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-late-marker-and-object-creation.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-late-marker-creation.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-late-mask-and-object-creation.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-late-mask-creation.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-creation.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-repaint-rect-on-path-with-stroke.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-update-bounce.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-update-container.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-update-gradient.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-update-image.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-update-pattern-child.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-update-pattern.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-update-polygon-changes.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-update-polygon-removal.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-update-stop-linked-gradient.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-update-stop.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-update-style.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-update-transform-addition.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/js-update-transform-changes.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/marker-child-changes-css.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/marker-child-changes.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/marker-strokeWidth-changes.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/marker-viewBox-changes.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/mask-child-changes.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/mask-clip-target-transform.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/mask-invalidation.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/modify-inserted-listitem.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/modify-text-node-in-tspan.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/modify-transferred-listitem-different-attr.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/modify-transferred-listitem.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/outline-offset-shape.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/outline-offset-text.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/paintorder-filtered.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/path-pathlength-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/pending-resource-after-removal.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/rect-modify-rx.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-document-scrollbars.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/remove-background-property-on-root.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/remove-border-property-on-root.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/remove-outline-property-on-root.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/remove-text-node-from-tspan.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/remove-tspan-from-text.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/repaint-in-scrolled-view.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/repaint-moving-svg-and-div.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/repaint-on-constant-size-change.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/repaint-on-image-bounds-change.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/repaint-paintorder.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/repaint-stroke-width-changes.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/resource-client-removal.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/resource-invalidate-on-target-update.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/rounded-rect-height-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/shape-transform-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/shape-with-nested-outline.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/stroke-opacity-update.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/svg-absolute-children.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-par-resize.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/svgsvgelement-repaint-children.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/text-dom-removal.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/text-mask-update.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/text-pattern-update-2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/text-pattern-update.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/text-selection-text-05-t.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/text-viewbox-rescale.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/text-xy-updates-SVGList.xhtml [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/transform-changed-state.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/transform-focus-ring-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/transform-foreign-object.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/transform-text-element.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/tspan-dynamic-positioning.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/tspan-pattern-update.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/use-detach.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/use-disappears-after-style-update.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/use-inherit-style.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/use-setAttribute-crash.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/svg/window.svg [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/animated-row-background.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/border-collapse-change-collapse-to-separate.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/border-collapse-change-separate-to-collapse.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-69296.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-cell-append.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-border-color.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-border-width.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-sl-border-color.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-change-col-border-color.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-change-col-border-width.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-change-colgroup-border-color.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-change-colgroup-border-width.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-change-row-border-color.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-change-row-border-width.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-change-table-border-color.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-change-table-border-width.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-change-tbody-border-color.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/cached-change-tbody-border-width.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-cell-collapsed-border.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-cell-move.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-cell-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-col-background.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-col-background-offset.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/collapsed-border-cell-resize.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-collapsed-border.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-extra-bottom-grow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-outer-border.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-overflow-auto-in-overflow-auto-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-overflow-scroll-in-overflow-scroll-scrolled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-percent-size-cell.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-vertical-align-cell.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/resize-table-row-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-row-bg-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table/row-change-background-rowspan-cell.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-row.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-section-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-section-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-shrink-row-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-two-pass-layout-overpaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/table-with-padding-row-invalidation.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/text-append-dirty-lines.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/textarea-appearance-none-resize-handle.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/textarea-caret.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/textarea-resize-property-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/textarea-set-disabled.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/text-in-relative-positioned-inline.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/text-match-document-change.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/trailing-floats-root-line-box-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/transform-absolute-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/transform-absolute-in-positioned-container.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/transform-disable-layoutstate.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/transform-inline-layered-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/transform-layout-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/transform-relative-position.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/transform-repaint-descendants.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/transform-replaced-shadows.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/transform-rotate-and-remove.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/transform-translate.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/vertical-align1.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/vertical-align2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/vertical-align-length1.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/vertical-align-length2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-child.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-parent.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-same.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/vertical-rl-as-paint-container.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/vertical-rl-overflow.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/video-mute-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/video-unmute-repaint.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/view-background-from-body-2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/viewport-gradient-background-html-resize.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-background-image-fixed-centered-composited.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-background-image-fixed-centered.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-background-image-generated.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-background-image-non-fixed.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-centered-inline-under-fixed-pos.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-frameset.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-media-query.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-no-layout-change1.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-no-layout-change2.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-percent-html.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-percent-width-height.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-positioned-bottom.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-positioned-percent-top.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-vertical-writing-mode.html [ Crash ]
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/window-resize-viewport-percent.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/pagination/pagination-change-clip-crash.html [ Failure ]
-Bug(none) virtual/disable-spinvalidation/paint/printing/print-box-shadow.html [ Failure ]
 Bug(none) virtual/gpu-rasterization/images/color-profile-group.html [ Failure ]
 Bug(none) virtual/gpu-rasterization/images/color-profile-iframe.html [ Failure ]
 Bug(none) virtual/mojo-loading/http/tests/dom/script-module-load-incomplete-no-crash.html [ Crash ]
diff --git a/third_party/WebKit/LayoutTests/LeakExpectations b/third_party/WebKit/LayoutTests/LeakExpectations
index 8c29ea7c..fcdd5e1 100644
--- a/third_party/WebKit/LayoutTests/LeakExpectations
+++ b/third_party/WebKit/LayoutTests/LeakExpectations
@@ -11,7 +11,6 @@
 
 # FIXME: The below tests fails when the leak detector is disabled.
 crbug.com/366029 compositing/fixed-body-background-positioned.html [ Failure Pass ]
-crbug.com/366029 virtual/disable-spinvalidation/compositing/fixed-body-background-positioned.html [ Failure Pass ]
 
 # FIXME: The below tests crashes when the leak detector is run on debug builds
 crbug.com/366043 [ Debug ] fast/history/history-traversal-is-asynchronous.html [ Crash ]
diff --git a/third_party/WebKit/LayoutTests/NeverFixTests b/third_party/WebKit/LayoutTests/NeverFixTests
index 5a3e9f1..cc25550 100644
--- a/third_party/WebKit/LayoutTests/NeverFixTests
+++ b/third_party/WebKit/LayoutTests/NeverFixTests
@@ -367,8 +367,6 @@
 # This W3C EME test fetches a file, which is not allowed.
 #external/wpt/encrypted-media/idlharness.html [ WontFix ]
 
-[ Win7 Debug ] virtual/disable-spinvalidation/compositing/perpendicular-layer-sorting.html [ WontFix ]
-
 # Below are manual tests from web-platform-tests without automation.
 external/wpt/2dcontext/drawing-paths-to-the-canvas/canvas_focus_drawFocusIfNeeded_AAPI_001-manual.html [ WontFix ]
 external/wpt/battery-status/battery-charging-manual.https.html [ WontFix ]
diff --git a/third_party/WebKit/LayoutTests/SlowTests b/third_party/WebKit/LayoutTests/SlowTests
index 136a8465..643bef0 100644
--- a/third_party/WebKit/LayoutTests/SlowTests
+++ b/third_party/WebKit/LayoutTests/SlowTests
@@ -14,8 +14,6 @@
 crbug.com/24182 editing/selection/modify_move/move-by-word-visually-multi-line.html [ Slow ]
 crbug.com/24182 compositing/culling/filter-occlusion-blur-large.html [ Slow ]
 crbug.com/24182 compositing/video-frame-size-change.html [ Slow ]
-crbug.com/24182 virtual/disable-spinvalidation/compositing/culling/filter-occlusion-blur-large.html [ Slow ]
-crbug.com/24182 virtual/disable-spinvalidation/compositing/video-frame-size-change.html [ Slow ]
 crbug.com/24182 css3/filters/effect-reference-hidpi-hw.html [ Slow ]
 crbug.com/24182 css3/filters/filter-change-repaint-composited.html [ Slow ]
 crbug.com/24182 editing/selection/caret-at-bidi-boundary.html [ Slow ]
@@ -300,7 +298,6 @@
 crbug.com/528419 inspector/elements/styles-2/pseudo-elements.html [ Slow ]
 
 crbug.com/529345 [ Win10 ] paint/masks/fieldset-mask.html [ Slow ]
-crbug.com/529345 [ Win10 ] virtual/disable-spinvalidation/paint/masks/fieldset-mask.html [ Slow ]
 crbug.com/552556 [ Win Linux ] virtual/threaded/fast/scroll-behavior/overflow-scroll-root-frame-animates.html [ Slow ]
 crbug.com/552556 [ Win Linux ] virtual/threaded/fast/scroll-behavior/overflow-scroll-animates.html [ Slow ]
 crbug.com/570656 [ Mac ] fast/writing-mode/Kusa-Makura-background-canvas.html [ Slow ]
@@ -353,7 +350,6 @@
 crbug.com/614910 virtual/gpu-rasterization/images/color-profile-filter.html [ Slow ]
 
 crbug.com/623798 paint/images/animated-gif-last-frame-crash.html [ Slow ]
-crbug.com/623798 virtual/disable-spinvalidation/paint/images/animated-gif-last-frame-crash.html [ Slow ]
 
 crbug.com/606649 fast/dom/gc-dom-tree-lifetime.html [ Slow ]
 
@@ -368,8 +364,6 @@
 # bots running tests on real hardware or maybe when using SwiftShader.
 crbug.com/646528 compositing/lots-of-img-layers.html [ Slow ]
 crbug.com/646528 compositing/lots-of-img-layers-with-opacity.html [ Slow ]
-crbug.com/646528 virtual/disable-spinvalidation/compositing/lots-of-img-layers.html [ Slow ]
-crbug.com/646528 virtual/disable-spinvalidation/compositing/lots-of-img-layers-with-opacity.html [ Slow ]
 
 # IDB Observer tests require multiple browsing contexts/workers interacting with
 # IndexedDB, which can be slow.
@@ -391,9 +385,15 @@
 
 crbug.com/719298 fast/dnd/dropEffect-for-effectAllowed.html [ Slow ]
 
+crbug.com/725548 [ Debug ] storage/indexeddb/objectstore-keycursor.html [ Slow ]
+
 crbug.com/676572 [ Debug ] external/wpt/webstorage/storage_local_setitem_quotaexceedederr.html [ Slow ]
 
 # These tests were previously marked Slow in ASANExpectations.
 crbug.com/451577 [ Linux ] inspector/elements/user-properties.html [ Slow ]
 crbug.com/451577 [ Linux ] inspector/layers/layer-canvas-log.html [ Slow ]
 
+# These imported tests exercise tens of thousands of code points and generate large results.
+crbug.com/736056 external/wpt/encoding/legacy-mb-japanese [ Slow ]
+crbug.com/736056 external/wpt/encoding/legacy-mb-korean [ Slow ]
+crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese [ Slow ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 70015e3..224f3344 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -49,10 +49,8 @@
 
 ########## Ref tests can't be rebaselined ##########
 crbug.com/504613 crbug.com/524248 [ Mac ] paint/images/image-backgrounds-not-antialiased.html [ Failure ]
-crbug.com/504613 crbug.com/524248 [ Mac ] virtual/disable-spinvalidation/paint/images/image-backgrounds-not-antialiased.html [ Failure ]
 
 crbug.com/619103 paint/invalidation/background-resize-width.html [ Failure Pass ]
-crbug.com/619103 virtual/disable-spinvalidation/paint/invalidation/background-resize-width.html [ Failure Pass ]
 
 crbug.com/627844 virtual/gpu/fast/canvas/canvas-createImageBitmap-colorClamping.html [ Failure ]
 
@@ -60,7 +58,6 @@
 crbug.com/644433 virtual/gpu/fast/canvas/OffscreenCanvas-2d-pattern-in-worker.html [ Failure ]
 
 crbug.com/702006 paint/invalidation/compositing/scrolling-neg-z-index-descendants-should-cause-repaint.html [ Failure ]
-crbug.com/702006 virtual/disable-spinvalidation/paint/invalidation/compositing/scrolling-neg-z-index-descendants-should-cause-repaint.html [ Failure ]
 
 ########## Genuinely flaky ##########
 crbug.com/624233 virtual/gpu-rasterization/images/color-profile-background-clip-text.html [ Pass Failure ]
@@ -68,9 +65,6 @@
 crbug.com/653722 compositing/reflections/nested-reflection-anchor-point.html [ Pass Failure ]
 crbug.com/653722 compositing/reflections/nested-reflection-animated.html [ Pass Failure ]
 crbug.com/653722 compositing/reflections/nested-reflection-transition.html [ Pass Failure ]
-crbug.com/653722 virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point.html [ Pass Failure ]
-crbug.com/653722 virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated.html [ Pass Failure ]
-crbug.com/653722 virtual/disable-spinvalidation/compositing/reflections/nested-reflection-transition.html [ Pass Failure ]
 
 crbug.com/664850 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-webgl.html [ Pass Failure ]
 crbug.com/664850 virtual/display_list_2d_canvas/fast/canvas/OffscreenCanvas-2d-drawImage.html [ Pass Failure ]
@@ -83,7 +77,6 @@
 # This is a missing event and increasing the timeout or using run-after-layout-and-paint doesn't
 # seem to fix it.
 crbug.com/309675 compositing/gestures/gesture-tapHighlight-simple-longPress.html [ Failure ]
-crbug.com/309675 virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-simple-longPress.html [ Failure ]
 
 # 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
@@ -1531,6 +1524,9 @@
 crbug.com/321237 [ Win ] fast/multicol/span/pseudo-before-after-in-content.html [ Failure ]
 crbug.com/321237 [ Win ] fast/selectors/004.html [ Failure ]
 
+crbug.com/739514 external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-2.html [ Failure ]
+crbug.com/715369 external/wpt/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html [ Failure ]
+
 crbug.com/501659 fast/xsl/xslt-missing-namespace-in-xslt.xml [ Failure ]
 
 crbug.com/501659 http/tests/security/xss-DENIED-xml-external-entity.xhtml [ Failure ]
@@ -1684,9 +1680,7 @@
 
 crbug.com/610464 [ Linux Win7 Debug ] inspector/components/throttler.html [ Failure Pass ]
 crbug.com/487344 [ Linux Mac Win7 ] paint/invalidation/video-paint-invalidation.html [ Failure ]
-crbug.com/487344 [ Linux Mac Win7 ] virtual/disable-spinvalidation/paint/invalidation/video-paint-invalidation.html [ Failure ]
 crbug.com/487344 [ Win ] compositing/video/video-controls-layer-creation.html [ Pass Failure ]
-crbug.com/487344 [ Win ] virtual/disable-spinvalidation/compositing/video/video-controls-layer-creation.html [ Pass Failure ]
 crbug.com/487344 fast/hidpi/video-controls-in-hidpi.html [ Failure ]
 crbug.com/487344 fast/layers/video-layer.html [ Failure ]
 crbug.com/487344 media/audio-controls-rendering.html [ Failure ]
@@ -1710,9 +1704,6 @@
 crbug.com/646644 [ Mac10.9 ] http/tests/media/video-buffered-range-contains-currentTime.html [ Failure Timeout ]
 crbug.com/646644 [ Mac10.9 ] virtual/mojo-loading/http/tests/media/video-buffered-range-contains-currentTime.html [ Failure Timeout ]
 
-# This test is irrelevant because we're about to delete the virtual test suite anyway.
-Bug(none) virtual/disable-spinvalidation/paint/invalidation/percentage-transform-paint-offset.html [ Crash ]
-
 crbug.com/637930 http/tests/media/video-buffered.html [ Pass Failure ]
 crbug.com/637930 virtual/mojo-loading/http/tests/media/video-buffered.html [ Pass Failure ]
 
@@ -1872,6 +1863,8 @@
 
 crbug.com/724251 virtual/threaded/animations/svg-attribute-interpolation/svg-startOffset-interpolation.html [ Failure Pass ]
 
+crbug.com/739965 inspector/console/console-log-linkify-stack-in-errors.html [ NeedsManualRebaseline ]
+
 crbug.com/736050 external/wpt/IndexedDB/idbcursor_advance_index.htm [ Pass Failure ]
 crbug.com/736050 external/wpt/IndexedDB/idbcursor-continue-exception-order.htm [ Pass Failure ]
 crbug.com/736050 external/wpt/IndexedDB/idbcursor_continue_index2.htm [ Pass Failure ]
@@ -1916,75 +1909,6 @@
 crbug.com/736050 external/wpt/IndexedDB/upgrade-transaction-lifecycle-backend-aborted.html [ Pass Failure ]
 crbug.com/736050 external/wpt/IndexedDB/value_recursive.htm [ Pass Failure ]
 
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-csshiftjis.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms932.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-ms_kanji.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-shift-jis.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-sjis.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-windows-31j.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-decode-x-sjis.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-csshiftjis.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-hangul.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-misc.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms932.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-ms_kanji.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-shift-jis.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-sjis.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-windows-31j.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-x-sjis.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-hangul.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-han.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href-errors-misc.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-href.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-cseuckr.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-csksc56011987.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-iso-ir-149.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-korean.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1987.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ks_c_5601-1989.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc_5601.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-ksc5601.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-decode-windows-949.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-cseuckr.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-han.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-iso-ir-149.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-korean.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1989.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc_5601.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ksc5601.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-windows-949.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-han.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href-errors-misc.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-href.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-cn-big5.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-csbig5.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-decode-x-x-big5.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-big5-hkscs.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-cn-big5.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-csbig5.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBa.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-extBb.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-han.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-misc.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-pua.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-form-x-x-big5.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-hangul.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-han.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href-errors-misc.html [ Pass Timeout ]
-crbug.com/736056 external/wpt/encoding/legacy-mb-tchinese/big5/big5-encode-href.html [ Pass Timeout ]
-
 # rebaseline-cl does not handle ref-tests yet...
 crbug.com/736811 fast/css/text-overflow-ellipsis-multiple-shadows.html [ Pass Failure ]
 crbug.com/736811 external/wpt/css/selectors4/focus-within-004.html [ Pass Failure ]
@@ -2027,7 +1951,6 @@
 crbug.com/626703 external/wpt/css/CSS2/text/white-space-mixed-001.xht [ Failure ]
 crbug.com/626703 external/wpt/css/CSS2/text/white-space-mixed-003.xht [ Failure ]
 crbug.com/626703 external/wpt/css/CSS2/text/white-space-mixed-004.xht [ Skip ]
-crbug.com/626703 external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html [ Timeout ]
 crbug.com/626703 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_allow_top_navigation-1.html [ Timeout ]
 crbug.com/626703 external/wpt/payment-request/payment-request-show-method.https.html [ Pass Failure ]
 crbug.com/626703 external/wpt/wasm/wasm_indexeddb_test.html [ Timeout ]
@@ -2856,7 +2779,6 @@
 # Sheriff failures 2017-05-22
 crbug.com/725542 [ Debug ] editing/selection/doubleclick-beside-cr-span.html [ Pass Timeout ]
 crbug.com/725545 [ Debug ] fast/forms/number/number-stepup-stepdown-from-renderer.html [ Pass Timeout ]
-crbug.com/725548 [ Debug ] storage/indexeddb/objectstore-keycursor.html [ Pass Timeout ]
 
 # Sheriff failures 2017-05-23
 crbug.com/725470 editing/shadow/doubleclick-on-meter-in-shadow-crash.html [ Crash Failure Pass ]
@@ -2903,9 +2825,6 @@
 # Sheriff failures 2017-06-23
 crbug.com/736548 [ Mac ] css2.1/t040304-c64-uri-00-a-g.html [ Failure Pass ]
 
-# Rebaselining a newly-passing test fixed by v8
-crbug.com/v8/6504 fast/js/mozilla/strict/B.1.2.html [ NeedsManualRebaseline ]
-
 crbug.com/v8/6529 inspector/console/console-dir.html [ NeedsManualRebaseline ]
 crbug.com/v8/6529 inspector/console/console-format.html [ NeedsManualRebaseline ]
 
@@ -2969,7 +2888,6 @@
 crbug.com/736177 [ Mac ] tables/mozilla_expected_failures/bugs/bug2479-5.html [ Failure Pass ]
 crbug.com/736177 [ Mac ] tables/mozilla_expected_failures/bugs/bug91057.html [ Failure Pass ]
 crbug.com/736177 [ Mac ] transforms/svg-vs-css.xhtml [ Failure Pass ]
-crbug.com/736177 [ Mac ] virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-150.html [ Failure Pass ]
 crbug.com/736177 [ Mac ] virtual/layout_ng/fast/block/basic/001.html [ Failure Pass ]
 crbug.com/736177 [ Mac ] virtual/mojo-loading/http/tests/misc/acid2-pixel.html [ Failure Pass ]
 crbug.com/736177 [ Mac ] virtual/off-main-thread-fetch/http/tests/misc/acid2-pixel.html [ Failure Pass ]
@@ -2981,6 +2899,12 @@
 crbug.com/736255 [ Mac ] external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-baseline-multi-item-vert-001b.html [ Skip ]
 crbug.com/736732 virtual/enable_wasm/external/wpt/wasm/wasm_local_iframe_test.html [ Timeout Pass ]
 
+# These imported tests exercise tens of thousands of code points and generate large results. Marked slow, but still timeout.
+crbug.com/736056 [ Mac ] external/wpt/encoding/legacy-mb-japanese [ Timeout Pass ]
+crbug.com/736056 [ Mac ] external/wpt/encoding/legacy-mb-korean [ Timeout Pass ]
+crbug.com/736056 [ Mac ] external/wpt/encoding/legacy-mb-tchinese [ Timeout Pass ]
+crbug.com/736056 external/wpt/encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-hangul.html [ Timeout Pass ]
+
 # Sheriff failures 2017-07-03
 crbug.com/708994 http/tests/security/cross-frame-mouse-source-capabilities.html [ Timeout Pass ]
 crbug.com/708994 virtual/mojo-loading/http/tests/security/cross-frame-mouse-source-capabilities.html [ Timeout Pass ]
diff --git a/third_party/WebKit/LayoutTests/VirtualTestSuites b/third_party/WebKit/LayoutTests/VirtualTestSuites
index d0da258..fece7d4 100644
--- a/third_party/WebKit/LayoutTests/VirtualTestSuites
+++ b/third_party/WebKit/LayoutTests/VirtualTestSuites
@@ -113,16 +113,6 @@
     "args": ["--stable-release-mode"]
   },
   {
-    "prefix": "disable-spinvalidation",
-    "base": "compositing",
-    "args": ["--disable-slimming-paint-invalidation"]
-  },
-  {
-    "prefix": "disable-spinvalidation",
-    "base": "paint",
-    "args": ["--disable-slimming-paint-invalidation"]
-  },
-  {
     "prefix": "off-main-thread-fetch",
     "base": "external/wpt/html/browsers/offline/appcache/workers",
     "args": ["--enable-features=OffMainThreadFetch"]
@@ -188,6 +178,16 @@
              "--disable-composited-antialiasing"]
   },
   {
+    "prefix": "android",
+    "base": "fast/rootscroller",
+    "args": ["--enable-features=OverlayScrollbar", "--enable-threaded-compositing",
+             "--enable-fixed-position-compositing", "--enable-prefer-compositing-to-lcd-text",
+             "--enable-composited-scrolling-for-frames", "--enable-gesture-tap-highlight", "--enable-pinch",
+             "--force-overlay-fullscreen-video", "--enable-overscroll-notifications",
+             "--enable-fixed-layout", "--enable-viewport", "--disable-canvas-aa",
+             "--disable-composited-antialiasing"]
+  },
+  {
     "prefix": "media-gpu-accelerated",
     "base": "http/tests/media/media-source",
     "args": ["--use-gpu-in-tests"]
@@ -239,6 +239,11 @@
   },
   {
     "prefix": "rootlayerscrolls",
+    "base": "fast/rootscroller",
+    "args": ["--root-layer-scrolls"]
+  },
+  {
+    "prefix": "rootlayerscrolls",
     "base": "fast/history/scroll-restoration",
     "args": ["--root-layer-scrolls"]
   },
diff --git a/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/add-multiple-event-listeners.html b/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/add-multiple-event-listeners.html
index 9fbb4f9..c6c39ffa 100644
--- a/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/add-multiple-event-listeners.html
+++ b/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/add-multiple-event-listeners.html
@@ -16,10 +16,10 @@
           'characteristicvaluechanged',
           3 /* attach 3 listeners */));
     }).then(results => {
-      let read_value = results[0].buffer;
-      let event_values = results.slice(1).map(v => v.buffer);
+      let read_value = new Uint8Array(results[0].buffer);
+      let event_values = results.slice(1).map(v => new Uint8Array(v.buffer));
       for (let event_value of event_values) {
-        assert_equals(event_value, read_value);
+        assert_equals(event_value.buffer, read_value.buffer);
         assert_array_equals(event_value, read_value);
       }
     });
diff --git a/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/event-is-fired.html b/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/event-is-fired.html
index b1456067..0a1f0dc 100644
--- a/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/event-is-fired.html
+++ b/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/event-is-fired.html
@@ -15,9 +15,9 @@
           'readValue',
           'characteristicvaluechanged'));
     }).then(results => {
-      let read_value = results[0].buffer;
-      let event_value = results[1].buffer;
-      assert_equals(event_value, read_value);
+      let read_value = new Uint8Array(results[0].buffer);
+      let event_value = new Uint8Array(results[1].buffer);
+      assert_equals(event_value.buffer, read_value.buffer);
       assert_array_equals(event_value, read_value);
     });
 }, 'Reading a characteristic should fire an event.');
diff --git a/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/read-succeeds.html b/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/read-succeeds.html
index d762359..d0171b5 100644
--- a/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/read-succeeds.html
+++ b/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/read-succeeds.html
@@ -14,7 +14,7 @@
           GATT_SUCCESS, EXPECTED_VALUE)
         .then(() => characteristic.readValue())
         .then(value => {
-          assert_array_equals(Array.from(new Uint8Array(value.buffer)),
+          assert_array_equals(new Uint8Array(value.buffer),
                               EXPECTED_VALUE);
         });
     });
diff --git a/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/read-updates-value.html b/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/read-updates-value.html
index 081c38a..68752def 100644
--- a/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/read-updates-value.html
+++ b/third_party/WebKit/LayoutTests/bluetooth/characteristic/readValue/read-updates-value.html
@@ -17,7 +17,7 @@
         .then(() => characteristic.readValue())
         .then(() => {
           assert_array_equals(
-            Array.from(new Uint8Array(characteristic.value.buffer)),
+            new Uint8Array(characteristic.value.buffer),
             EXPECTED_VALUE);
         });
     });
diff --git a/third_party/WebKit/LayoutTests/bluetooth/characteristic/writeValue/write-updates-value.html b/third_party/WebKit/LayoutTests/bluetooth/characteristic/writeValue/write-updates-value.html
index f7dd018..fd8e19bc 100644
--- a/third_party/WebKit/LayoutTests/bluetooth/characteristic/writeValue/write-updates-value.html
+++ b/third_party/WebKit/LayoutTests/bluetooth/characteristic/writeValue/write-updates-value.html
@@ -17,7 +17,8 @@
       let textEncoder = new TextEncoder();
       let newValue = textEncoder.encode('foo');
       return characteristic.writeValue(newValue).then(() => {
-        assert_array_equals(characteristic.value.buffer, newValue.buffer);
+        assert_array_equals(new Uint8Array(characteristic.value.buffer),
+                            new Uint8Array(newValue.buffer));
       });
     });
 }, 'A regular write request to a writable characteristic should update value.');
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png b/third_party/WebKit/LayoutTests/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png
index 31ce3d9..c68cd2b 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/compositing/text-on-scaled-surface-expected.html b/third_party/WebKit/LayoutTests/compositing/text-on-scaled-surface-expected.html
deleted file mode 100644
index b67f858..0000000
--- a/third_party/WebKit/LayoutTests/compositing/text-on-scaled-surface-expected.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-<script>
-if (window.testRunner) {
-  testRunner.dumpAsTextWithPixelResults();
-}
-</script>
-<body style="overflow:hidden">
-<div style="-webkit-transform-origin: 0 0; transform:translate(50px,50px) scale(1.5); background: green; width:30em; height:8em;">
-  <div style="-webkit-transform-origin: 0 0; transform:scale(1.5);">
-  <!-- Use short lines of text to avoid accumulating error -->
-  Text on<br/>
-  a scaled<br/>
-  composited<br/>
-  layer<br/>
-  </div>
-</div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/compositing/text-on-scaled-surface-expected.txt b/third_party/WebKit/LayoutTests/compositing/text-on-scaled-surface-expected.txt
new file mode 100644
index 0000000..e456258f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/compositing/text-on-scaled-surface-expected.txt
@@ -0,0 +1,5 @@
+Text on
+a scaled
+composited
+layer
+
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
index dd643821..cf4096c 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -257943,7 +257943,7 @@
    "testharness"
   ],
   "resource-timing/test_resource_timing.js": [
-   "212dd1f05242ce9e850698b0c9f7eff085313838",
+   "504f20a00b7be9c3b15666dfe34df02856a8bc72",
    "support"
   ],
   "screen-orientation/lock-bad-argument-expected.txt": [
@@ -258367,7 +258367,7 @@
    "support"
   ],
   "server-timing/test_server_timing.html": [
-   "eab2a2be6984346d7fd83c8f3dcc99b2f3e09a08",
+   "3f582e55c8d96a4fb1589ad9bd6e7ca26b75b7a2",
    "testharness"
   ],
   "server-timing/test_server_timing.html.sub.headers": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-001-ref.html
new file mode 100644
index 0000000..83edae1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-001-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<style>
+html, body { margin: 0; padding: 0; }
+</style>
+<body>
+<canvas id ="canvas" width="100" height="100"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.strokeStyle = 'green';
+context.lineWidth = 4;
+context.strokeRect(0, 0, 100, 100);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-001.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-001.html
new file mode 100644
index 0000000..d1207e0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-001.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="geometry-background-image-001-ref.html">
+<style>
+html, body { margin: 0; padding: 0; }
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        ctx.strokeStyle = 'green';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-002-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-002-ref.html
new file mode 100644
index 0000000..ab964db
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-002-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<style>
+html, body { margin: 0; padding: 0; }
+</style>
+<body>
+<canvas id ="canvas" width="200" height="200"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.strokeStyle = 'green';
+context.lineWidth = 4;
+context.strokeRect(0, 0, 200, 200);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-002.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-002.html
new file mode 100644
index 0000000..47455ba2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-002.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="geometry-background-image-002-ref.html">
+<style>
+html, body { margin: 0; padding: 0; }
+.container {
+  width: 200px;
+  height: 200px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        ctx.strokeStyle = 'green';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-003-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-003-ref.html
new file mode 100644
index 0000000..ffdc4e8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-003-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<style>
+html, body { margin: 0; padding: 0; }
+</style>
+<body>
+<canvas id ="canvas" width="200" height="200" style="position:relative;"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.strokeStyle = 'green';
+context.lineWidth = 8;
+context.strokeRect(0, 0, 200, 200);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-003.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-003.html
new file mode 100644
index 0000000..ef2530b0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-003.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="geometry-background-image-003-ref.html">
+<style>
+html, body { margin: 0; padding: 0; }
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        ctx.strokeStyle = 'green';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    document.body.style.zoom = "200%"
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-001-ref.html
new file mode 100644
index 0000000..9f633a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-001-ref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<style>
+html, body { margin: 0; padding: 0; }
+</style>
+<body>
+<canvas id ="canvas" width="100" height="50"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.strokeStyle = 'green';
+context.lineWidth = 4;
+context.strokeRect(0, 0, 50, 50);
+context.strokeRect(50, 0, 50, 50);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-001.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-001.html
new file mode 100644
index 0000000..d2b7e92
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-001.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="geometry-background-image-tiled-001-ref.html">
+<style>
+html, body { margin: 0; padding: 0; }
+.container {
+  width: 100px;
+  height: 100px;
+  background: paint(geometry) top left/50% 50% repeat-x;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        ctx.strokeStyle = 'green';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-002-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-002-ref.html
new file mode 100644
index 0000000..f3c65e6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-002-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<style>
+html, body { margin: 0; padding: 0; }
+</style>
+<body>
+<canvas id ="canvas" width="50" height="20" style="position:relative; top:40px; left:50px"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.strokeStyle = 'green';
+context.lineWidth = 4;
+context.strokeRect(0, 0, 50, 20);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-002.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-002.html
new file mode 100644
index 0000000..491abd1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-002.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="geometry-background-image-tiled-002-ref.html">
+<style>
+html, body { margin: 0; padding: 0; }
+.container {
+  width: 100px;
+  height: 100px;
+  background: paint(geometry) center right/50% 20% no-repeat;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        ctx.strokeStyle = 'green';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-003-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-003-ref.html
new file mode 100644
index 0000000..8e1eb027
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-003-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<style>
+html, body { margin: 0; padding: 0; }
+</style>
+<body>
+<canvas id ="canvas" width="60" height="80" style="position:relative; top:10px; left:20px"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.strokeStyle = 'green';
+context.lineWidth = 4;
+context.strokeRect(0, 0, 60, 80);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-003.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-003.html
new file mode 100644
index 0000000..9a29c30
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-background-image-tiled-003.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="geometry-background-image-tiled-003-ref.html">
+<style>
+html, body { margin: 0; padding: 0; }
+.container {
+  width: 100px;
+  height: 100px;
+  background: paint(geometry) center center/60px 80px no-repeat;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        ctx.strokeStyle = 'green';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-001-ref.html
new file mode 100644
index 0000000..bb0aa40
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-001-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<style>
+html, body { margin: 0; padding: 0; }
+</style>
+<body>
+<canvas id ="canvas" width="200" height="200" style="position:relative; top:10px; left:10px"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+// The test geometry-border-image1.html has a paint canvas with width=200 and
+// height=200, as well as a border-width=10 and border-image-slice: fill. All of
+// them combined meaning that it draws to the (200+10*2)*(200+10*2) area, but
+// stretch it to fit into the 200*200 area.
+// So in this ref test, we create a 200*200 canvas. We draw to a 220*220 area
+// and scale it to fit the 200*200 canvas.
+context.scale(200/220, 200/220);
+context.strokeStyle = 'green';
+context.lineWidth = 4;
+context.strokeRect(0, 0, 220, 220);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-001.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-001.html
new file mode 100644
index 0000000..54249d34
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-001.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="geometry-border-image-001-ref.html">
+<style>
+html, body { margin: 0; padding: 0; }
+.container {
+  width: 200px;
+  height: 200px;
+}
+
+#canvas-geometry {
+  border: solid 0;
+  border-image: paint(geometry);
+  border-image-slice: 0 fill;
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (geom.width == 220 && geom.height == 220)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    document.getElementById('canvas-geometry').style.borderWidth = '10px';
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-002-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-002-ref.html
new file mode 100644
index 0000000..0eb84ec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-002-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<style>
+html, body { margin: 0; padding: 0; }
+</style>
+<body>
+<canvas id ="canvas" width="90" height="90" style="position:relative; left:-20px; top:-20px"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.strokeStyle = 'green';
+context.lineWidth = 4;
+context.strokeRect(0, 0, 90, 90);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-002.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-002.html
new file mode 100644
index 0000000..4759886
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-002.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="geometry-border-image-002-ref.html">
+<style>
+html, body { margin: 0; padding: 0; }
+.container {
+  width: 50px;
+  height: 50px;
+}
+
+#canvas-geometry {
+  border: solid 0;
+  border-image: paint(geometry);
+  border-image-slice: 0 fill;
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (geom.width == 90 && geom.height == 90)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    document.getElementById('canvas-geometry').style.borderImageOutset = '20px';
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-003-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-003-ref.html
new file mode 100644
index 0000000..b17c9ffc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-003-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<style>
+html, body { margin: 0; padding: 0; }
+</style>
+<body>
+<canvas id ="canvas" width="80" height="120" style="position:relative; left:-10px; top:-10px"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.strokeStyle = 'green';
+context.lineWidth = 4;
+context.strokeRect(0, 0, 80, 120);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-003.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-003.html
new file mode 100644
index 0000000..1ce6ac9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-003.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="geometry-border-image-003-ref.html">
+<style>
+html, body { margin: 0; padding: 0; }
+.container {
+  width: 60px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  border: solid 0;
+  border-image: paint(geometry);
+  border-image-slice: 0 fill;
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (geom.width == 80 && geom.height == 120)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    document.getElementById('canvas-geometry').style.borderImageOutset = '10px';
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-004-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-004-ref.html
new file mode 100644
index 0000000..c32fdd8f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-004-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<style>
+html, body { margin: 0; padding: 0; }
+</style>
+<body>
+<canvas id ="canvas" width="120" height="120"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+// The test geometry-border-image4.html has a 100*100 paint canvas, it specifies
+// border-width=10 and border-image-outset=10, which means that it is drawing to
+// a 140*140 area. However, because the test has "border-image-slice: 0 fill",
+// together with the border-width=10, makes it draw to a 120*120 area.
+// In this ref html, we draw to a 140*140 area, but scale it to fit the 120*120
+// canvas.
+context.scale(120/140, 120/140);
+context.strokeStyle = 'green';
+context.lineWidth = 4;
+context.strokeRect(0, 0, 140, 140);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-004.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-004.html
new file mode 100644
index 0000000..b15b66d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-004.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="geometry-border-image-004-ref.html">
+<style>
+html, body { margin: 0; padding: 0; }
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  border: solid 0;
+  border-image: paint(geometry);
+  border-image-slice: 0 fill;
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (geom.width == 140 && geom.height == 140)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    document.getElementById('canvas-geometry').style.borderWidth = '10px';
+    document.getElementById('canvas-geometry').style.borderImageOutset = '10px';
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-005-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-005-ref.html
new file mode 100644
index 0000000..a578145
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-005-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<style>
+html, body { margin: 0; padding: 0; }
+</style>
+<body>
+<canvas id ="canvas" width="240" height="240" style="position:relative; left:-20px; top:-20px"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.strokeStyle = 'green';
+context.lineWidth = 8;
+context.strokeRect(0, 0, 240, 240);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-005.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-005.html
new file mode 100644
index 0000000..a2f61d5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/geometry-border-image-005.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="geometry-border-image-005-ref.html">
+<style>
+html, body { margin: 0; padding: 0; }
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  border: solid 0;
+  border-image: paint(geometry);
+  border-image-slice: 0 fill;
+}
+</style>
+<script src="../common/reftest-wait.js"></script>
+<script src="../common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (geom.width == 120 && geom.height == 120)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    document.getElementById('canvas-geometry').style.borderImageOutset = '10px';
+    document.body.style.zoom = "200%";
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/paint2d-zoom-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/paint2d-zoom-ref.html
new file mode 100644
index 0000000..c96893e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/paint2d-zoom-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<style>
+html, body { margin: 0; padding: 0; }
+</style>
+<body>
+<div style="position:relative">
+<canvas id="output" width="300" height="300"></canvas>
+</div>
+<script>
+var canvas = document.getElementById('output');
+var ctx = canvas.getContext('2d');
+ctx.rotate(10 * Math.PI / 180);
+ctx.strokeStyle = 'blue';
+ctx.lineWidth = 12;
+ctx.strokeRect(90, 30, 90, 90);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/paint2d-zoom.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/paint2d-zoom.html
new file mode 100644
index 0000000..6c6c743
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/paint2d-zoom.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="paint2d-zoom-ref.html">
+<style>
+html, body { margin: 0; padding: 0; }
+#output {
+    width: 100px;
+    height: 100px;
+    background-image: paint(worklet);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="output"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('worklet', class {
+    paint(ctx, geom) {
+         ctx.rotate(10 * Math.PI / 180);
+         ctx.strokeStyle = 'blue';
+         ctx.lineWidth = 4;
+         ctx.strokeRect(30, 10, 30, 30);
+    }
+});
+</script>
+
+<script>
+    document.body.style.zoom = "300%";
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-001.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-001.html
new file mode 100644
index 0000000..931a55a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-001.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('foo', class {
+        static get inputArguments() {
+            throw Error('failed!');
+        }
+    });
+} catch(ex) {
+    if (ex.name == 'Error' && ex.message == 'failed!')
+        testsPassed = true;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-002.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-002.html
new file mode 100644
index 0000000..c07c0c0a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-002.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('foo1', class {
+        static get inputArguments() {
+            return 'non sense stuff';
+        }
+    });
+} catch(ex) {
+    if (ex.name == "TypeError" && ex.message == "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The provided value cannot be converted to a sequence.")
+        testsPassed = true;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-003.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-003.html
new file mode 100644
index 0000000..ff388dee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-003.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('foo2', class {
+        static get inputArguments() {
+            return ['<non-sense-type>'];
+        }
+    });
+} catch(ex) {
+    if (ex.name == "TypeError" && ex.message == "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': Invalid argument types.")
+        testsPassed = true;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-004.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-004.html
new file mode 100644
index 0000000..8d5b8d7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-004.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('foo3', class {
+        static get inputArguments() {
+            return ['<length>'];
+        }
+        paint() { }
+    });
+    testsPassed = true;
+} catch(ex) {
+    testsPassed = false;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-005.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-005.html
new file mode 100644
index 0000000..b726c22b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-005.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('foo', class { paint() { } });
+    registerPaint('foo', class { paint() { } });
+} catch(ex) {
+    if (ex.name == "NotSupportedError" && ex.message == "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': A class with name:'foo' is already registered.")
+        testsPassed = true;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-006.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-006.html
new file mode 100644
index 0000000..7d8504c4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-006.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('', class { });
+} catch(ex) {
+    if (ex.name == 'TypeError' && ex.message == "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The empty string is not a valid name.")
+        testsPassed = true;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-007.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-007.html
new file mode 100644
index 0000000..a59ac93
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-007.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('foo3', class {
+        static get inputProperties() {
+            throw Error('failed!');
+        }
+    });
+} catch(ex) {
+    if (ex.name == 'Error' && ex.message == 'failed!')
+        testsPassed = true;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-008.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-008.html
new file mode 100644
index 0000000..2d6df23
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-008.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('foo4', class {
+        static get inputProperties() {
+            return 42;
+        }
+    });
+} catch(ex) {
+    if (ex.name == 'TypeError' && ex.message == "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The provided value cannot be converted to a sequence.")
+        testsPassed = true;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-009.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-009.html
new file mode 100644
index 0000000..03c7c690
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-009.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    var a = function() { };
+    a.prototype = undefined;
+    registerPaint('foo5', a);
+} catch(ex) {
+    if (ex.name == 'TypeError' && ex.message == "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The 'prototype' object on the class does not exist.")
+        testsPassed = true;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-010.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-010.html
new file mode 100644
index 0000000..0bd67684
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-010.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    var b = function() { };
+    b.prototype = 42;
+    registerPaint('foo6', b);
+} catch(ex) {
+    if (ex.name == 'TypeError' && ex.message == "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The 'prototype' property on the class is not an object.")
+        testsPassed = true;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-011.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-011.html
new file mode 100644
index 0000000..8945f7e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-011.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('foo7', class { });
+} catch(ex) {
+    if (ex.name == 'TypeError' && ex.message == "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The 'paint' function on the prototype does not exist.")
+        testsPassed = true;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-012.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-012.html
new file mode 100644
index 0000000..422b45f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-012.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('foo8', class {
+        get paint() {
+            return 42;
+        }
+    });
+} catch(ex) {
+    if (ex.name == 'TypeError' && ex.message == "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The 'paint' property on the prototype is not a function.")
+        testsPassed = true;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-013.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-013.html
new file mode 100644
index 0000000..cd62879
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-013.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('foo9', class { paint() { } });
+    testsPassed = true;
+} catch(ex) {
+    testsPassed = false;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-014.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-014.html
new file mode 100644
index 0000000..39aee6a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-014.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    var c = function() { };
+    c.prototype.paint = function() { };
+    registerPaint('foo10', c);
+    testsPassed = true;
+} catch(ex) {
+    testsPassed = false;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-015.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-015.html
new file mode 100644
index 0000000..c2e18446
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-015.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('foo11', class {
+        static get inputProperties() {
+            return ['-webkit-border-radius'];
+    }
+        paint() { }
+    });
+    testsPassed = true;
+} catch(ex) {
+    testsPassed = false;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-016.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-016.html
new file mode 100644
index 0000000..3669c2b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-016.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('foo12', class {
+        static get alpha() {
+            return 42;
+        }
+    });
+} catch(ex) {
+    if (ex.name == "TypeError" && ex.message == "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The 'alpha' property on the class is not a boolean.")
+        testsPassed = true;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-017.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-017.html
new file mode 100644
index 0000000..09708ab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-017.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+var testsPassed = false;
+try {
+    registerPaint('foo13', class {
+        static get alpha() {
+            return true;
+        }
+        paint() { }
+    });
+    testsPassed = true;
+} catch(ex) {
+    testsPassed = false;
+}
+
+registerPaint('geometry', class {
+    paint(ctx, geom) {
+        if (testsPassed)
+            ctx.strokeStyle = 'green';
+        else
+            ctx.strokeStyle = 'red';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-ref.html
new file mode 100644
index 0000000..086bc7b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/parse-input-arguments-ref.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<body>
+<canvas id ="canvas" width="100" height="100"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.strokeStyle = 'green';
+context.lineWidth = 4;
+context.strokeRect(0, 0, 100, 100);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/registered-properties-in-custom-paint.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/registered-properties-in-custom-paint.html
new file mode 100644
index 0000000..d77a33f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/registered-properties-in-custom-paint.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="parse-input-arguments-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+  --length: 10px;
+  --number: 10;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    static get inputProperties() {
+        return [
+            '--length',
+            '--length-initial',
+            '--number',
+        ];
+    }
+    paint(ctx, geom, styleMap) {
+        const properties = styleMap.getProperties().sort();
+        var serializedStrings = [];
+        for (let i = 0; i < properties.length; i++) {
+            const value = styleMap.get(properties[i]);
+            let serialized;
+            if (value)
+                serialized = properties[i].toString() + ': [' + value.constructor.name + '=' + value.toString() + ']';
+            else
+                serialized = properties[i].toString() + ': [null]';
+            serializedStrings.push(serialized);
+        }
+        ctx.strokeStyle = 'green';
+        if (serializedStrings[0] != "--length: [CSSUnitValue=10px]")
+            ctx.strokeStyle = 'red';
+        if (serializedStrings[1] != "--length-initial: [CSSUnitValue=20px]")
+            ctx.strokeStyle = 'blue';
+        if (serializedStrings[2] != "--number: [CSSStyleValue=10]")
+            ctx.strokeStyle = 'yellow';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    CSS.registerProperty({name: '--length', syntax: '<length>', initialValue: '0px'});
+    CSS.registerProperty({name: '--length-initial', syntax: '<length>', initialValue: '20px'});
+    CSS.registerProperty({name: '--number', syntax: '<number>', initialValue: '0'});
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-background-image-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-background-image-ref.html
new file mode 100644
index 0000000..3fc9e6e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-background-image-ref.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<body>
+<canvas id ="canvas" width="100" height="100" style="border-radius: 2px"></canvas>
+<script>
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.strokeStyle = 'green';
+context.lineWidth = 4;
+context.strokeRect(0, 0, 100, 100);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-background-image.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-background-image.html
new file mode 100644
index 0000000..716c28c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-background-image.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="style-background-image-ref.html">
+<style>
+.container {
+  width: 100px;
+  height: 100px;
+  border-radius: 2px;
+  --foo: bar;
+}
+
+#canvas-geometry {
+  background-image: paint(geometry);
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body>
+<div id="canvas-geometry" class="container"></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    static get inputProperties() {
+        return [
+            '--bar',
+            '--foo',
+            'align-items',
+            'border-radius',
+        ];
+    }
+    paint(ctx, geom, styleMap) {
+        const properties = styleMap.getProperties().sort();
+        var serializedStrings = [];
+        for (let i = 0; i < properties.length; i++) {
+            const value = styleMap.get(properties[i]);
+            let serialized;
+            if (value)
+                serialized = properties[i].toString() + ': [' + value.constructor.name + '=' + value.toString() + ']';
+            else
+                serialized = properties[i].toString() + ': [null]';
+            serializedStrings.push(serialized);
+        }
+        ctx.strokeStyle = 'green';
+        if (serializedStrings[0] != "--bar: [null]")
+            ctx.strokeStyle = 'red';
+        if (serializedStrings[1] != "--foo: [CSSStyleValue= bar]")
+            ctx.strokeStyle = 'blue';
+        if (serializedStrings[2] != "align-items: [CSSKeywordValue=normal]")
+            ctx.strokeStyle = 'yellow';
+        if (serializedStrings[3] != "border-radius: [CSSStyleValue=2px]")
+            ctx.strokeStyle = 'cyan';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-before-pseudo-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-before-pseudo-ref.html
new file mode 100644
index 0000000..9a666ef
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-before-pseudo-ref.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<style>
+div {
+    border-radius: 3px;
+}
+div::before {
+    width: 100px;
+    height: 100px;
+    border-radius: 2px;
+    content: 'foo';
+    color: rgba(0, 0, 0, 0);
+}
+canvas{
+    border-radius: 2px;
+    display: block;
+    position: relative;
+    top: -1em;
+}
+</style>
+<body style="font: 10px/1 Ahem;">
+    <div><canvas width="30px" height="10px"></canvas></div>
+<script>
+document.addEventListener('DOMContentLoaded', function() {
+    var canvas = document.querySelector('canvas');
+    var context = canvas.getContext("2d");
+    context.strokeStyle = 'green';
+    context.lineWidth = 4;
+    context.strokeRect(0, 0, 30, 10);
+});
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-before-pseudo.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-before-pseudo.html
new file mode 100644
index 0000000..8ba4cdb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-before-pseudo.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="style-before-pseudo-ref.html">
+<style>
+div {
+    border-radius: 3px;
+}
+
+div::before {
+    width: 100px;
+    height: 100px;
+    content: 'foo';
+    color: rgba(0, 0, 0, 0);
+
+    background-image: paint(geometry);
+    border-radius: 2px;
+    --foo: bar;
+}
+</style>
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/css-paint-tests.js"></script>
+<body style="font: 10px/1 Ahem;">
+<div></div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    static get inputProperties() {
+        return [
+            '--bar',
+            '--foo',
+            'border-radius',
+        ];
+    }
+    paint(ctx, geom, styleMap) {
+        const properties = styleMap.getProperties().sort();
+        var serializedStrings = [];
+        for (let i = 0; i < properties.length; i++) {
+            const value = styleMap.get(properties[i]);
+            let serialized;
+            if (value)
+                serialized = properties[i].toString() + ': [' + value.constructor.name + '=' + value.toString() + ']';
+            else
+                serialized = properties[i].toString() + ': [null]';
+            serializedStrings.push(serialized);
+        }
+        ctx.strokeStyle = 'green';
+        if (serializedStrings[0] != "--bar: [null]")
+            ctx.strokeStyle = 'red';
+        if (serializedStrings[1] != "--foo: [CSSStyleValue= bar]")
+            ctx.strokeStyle = 'blue';
+        if (serializedStrings[2] != "border-radius: [CSSStyleValue=2px]")
+            ctx.strokeStyle = 'yellow';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-first-letter-pseudo-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-first-letter-pseudo-ref.html
new file mode 100644
index 0000000..ea5c04a1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-first-letter-pseudo-ref.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<style>
+div {
+    color: rgb(0, 255, 0);
+    line-height: 2px;
+}
+
+div::first-letter {
+    color: rgb(255, 0, 0);
+}
+canvas{
+    position: absolute;
+    top: 4px;
+    z-index: -1;
+}
+</style>
+<body style="font: 10px/1 Ahem;">
+<div><canvas width="10px" height="10px"></canvas>ppp</div>
+<script>
+document.addEventListener('DOMContentLoaded', function() {
+    var canvas = document.querySelector('canvas');
+    var context = canvas.getContext("2d");
+    context.strokeStyle = 'green';
+    context.lineWidth = 4;
+    context.strokeRect(0, 0, 10, 10);
+});
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-first-letter-pseudo.html b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-first-letter-pseudo.html
new file mode 100644
index 0000000..61763b28
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css-paint-api/style-first-letter-pseudo.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="style-first-letter-pseudo-ref.html">
+<style>
+div {
+    color: rgb(0, 255, 0);
+    line-height: 1px;
+    height: 10px;
+}
+
+div::first-letter {
+    background-image: paint(geometry);
+    color: rgb(255, 0, 0);
+    line-height: 2px;
+}
+</style>
+<script src="../common/reftest-wait.js"></script>
+<script src="../common/css-paint-tests.js"></script>
+<body style="font: 10px/1 Ahem;">
+<div>ppp</div>
+
+<script id="code" type="text/worklet">
+registerPaint('geometry', class {
+    static get inputProperties() {
+        return [
+            'color',
+            'line-height',
+        ];
+    }
+    paint(ctx, geom, styleMap) {
+        const properties = styleMap.getProperties().sort();
+        var serializedStrings = [];
+        for (let i = 0; i < properties.length; i++) {
+            const value = styleMap.get(properties[i]);
+            let serialized;
+            if (value)
+                serialized = properties[i].toString() + ': [' + value.constructor.name + '=' + value.toString() + ']';
+            else
+                serialized = properties[i].toString() + ': [null]';
+            serializedStrings.push(serialized);
+        }
+        ctx.strokeStyle = 'green';
+        if (serializedStrings[0] != "color: [CSSStyleValue=rgb(255, 0, 0)]")
+            ctx.strokeStyle = 'red';
+        if (serializedStrings[1] != "line-height: [CSSUnitValue=2px]")
+            ctx.strokeStyle = 'blue';
+        ctx.lineWidth = 4;
+        ctx.strokeRect(0, 0, geom.width, geom.height);
+    }
+});
+</script>
+
+<script>
+    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-position-3/position-sticky-grid-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-position-3/position-sticky-grid-ref.html
new file mode 100644
index 0000000..9af8112
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-position-3/position-sticky-grid-ref.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<title>Reference for position:sticky elements should work correctly with grid layout</title>
+
+<style>
+.scroller {
+  position: relative;
+  overflow-x: scroll;
+  overflow-y: hidden;
+  width: 300px;
+  height: 100px;
+  margin-bottom: 15px;
+}
+
+.grid-container {
+  display: grid;
+  grid-template-columns: 25% 25% 25% 25%;
+  grid-template-rows: 100%;
+  width: 400px;
+  height: 90px;
+}
+
+.green {
+  background-color: green;
+}
+
+.grid-item {
+  width: 100%;
+  height: 100%;
+  grid-row: 1;
+}
+
+.padding {
+  height: 1px;
+  width: 700px;
+}
+
+</style>
+
+<script>
+window.addEventListener('load', function() {
+  document.getElementById('scroller1').scrollLeft = 0;
+  document.getElementById('scroller2').scrollLeft = 150;
+  document.getElementById('scroller3').scrollLeft = 300;
+});
+</script>
+
+<div id="scroller1" class="scroller">
+  <div class="grid-container">
+    <div class="grid-item" style="grid-column: 1;"></div>
+    <div class="green grid-item" style="grid-column: 2;"></div>
+    <div class="green grid-item" style="grid-column: 3;"></div>
+  </div>
+  <div class="padding"></div>
+</div>
+
+<div id="scroller2" class="scroller">
+  <div class="grid-container">
+    <div class="grid-item" style="grid-column: 1;"></div>
+    <div class="grid-item" style="grid-column: 2;"></div>
+    <div class="green grid-item" style="grid-column: 3;"></div>
+  </div>
+  <div class="padding"></div>
+</div>
+
+<div id="scroller3" class="scroller">
+  <div class="grid-container">
+    <div class="grid-item" style="grid-column: 1;"></div>
+    <div class="grid-item" style="grid-column: 2;"></div>
+    <div class="grid-item" style="grid-column: 3;"></div>
+    <div class="green grid-item" style="grid-column: 4;"></div>
+  </div>
+  <div class="padding"></div>
+</div>
+
+<p>You should see three green boxes of varying size above. There should be no red.</p>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-position-3/position-sticky-grid.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-position-3/position-sticky-grid.html
new file mode 100644
index 0000000..c2c1b8e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-position-3/position-sticky-grid.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<title>position:sticky elements should work correctly with grid layout</title>
+<link rel="match" href="position-sticky-grid-ref.html" />
+<link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos" />
+<meta name="assert" content="This test checks that position:sticky elements interoperate correctly with grid" />
+
+<style>
+.scroller {
+  position: relative;
+  overflow-x: scroll;
+  overflow-y: hidden;
+  width: 300px;
+  height: 100px;
+  margin-bottom: 15px;
+}
+
+.grid-container {
+  display: grid;
+  grid-template-columns: 25% 25% 25% 25%;
+  grid-template-rows: 100%;
+  width: 400px;
+  height: 90px;
+}
+
+.sticky {
+  position: sticky;
+  left: 50px;
+}
+
+.green {
+  background-color: green;
+}
+
+.grid-item {
+  width: 100%;
+  height: 100%;
+  grid-row: 1;
+}
+
+.indicator {
+  position: absolute;
+  background-color: red;
+  width: 100px;
+  height: 90px;
+}
+
+.padding {
+  height: 1px;
+  width: 700px;
+}
+
+</style>
+
+<script>
+window.addEventListener('load', function() {
+  document.getElementById('scroller1').scrollLeft = 0;
+  document.getElementById('scroller2').scrollLeft = 150;
+  document.getElementById('scroller3').scrollLeft = 300;
+});
+</script>
+
+<div id="scroller1" class="scroller">
+  <div class="grid-container">
+    <div class="indicator" style="left: 100px;"></div>
+    <div class="grid-item" style="grid-column: 1;"></div>
+    <div class="sticky green grid-item" style="grid-column: 2;"></div>
+    <div class="green grid-item" style="grid-column: 3;"></div>
+  </div>
+  <div class="padding"></div>
+</div>
+
+<div id="scroller2" class="scroller">
+  <div class="grid-container">
+    <div class="indicator" style="left: 200px;"></div>
+    <div class="grid-item" style="grid-column: 1;"></div>
+    <div class="sticky green grid-item" style="grid-column: 2;"></div>
+    <div class="green grid-item" style="grid-column: 3;"></div>
+  </div>
+  <div class="padding"></div>
+</div>
+
+<div id="scroller3" class="scroller">
+  <div class="grid-container">
+    <div class="indicator" style="left: 300px;"></div>
+    <div class="grid-item" style="grid-column: 1;"></div>
+    <div class="sticky green grid-item" style="grid-column: 2;"></div>
+    <div class="green grid-item" style="grid-column: 3;"></div>
+  </div>
+  <div class="padding"></div>
+</div>
+
+<p>You should see three green boxes of varying size above. There should be no red.</p>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-1.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-1.html
new file mode 100644
index 0000000..4557155
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-1.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<head>
+<title>load/error events for classic scripts</title>
+<!-- For module scripts see module/load-error-events*.html -->
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/load-error-events-helpers.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#execute-the-script-block">
+</head>
+<script>
+"use strict";
+var test1_load = event_test('src, 200, parser-inserted, defer, no async', true, false);
+var test2_load = event_test('src, 200, parser-inserted, no defer, no async', true, false);
+var test4_load = event_test('src, 200, parser-inserted, no defer, async', true, false);
+
+var test3_dynamic_load = event_test('src, 200, not parser-inserted, no defer, no async, no non-blocking', true, false);
+var test4_dynamic_load = event_test('src, 200, not parser-inserted, no defer, async', true, false);
+
+var test1_error = event_test('src, 404, parser-inserted, defer, no async', false, true);
+var test2_error = event_test('src, 404, parser-inserted, no defer, no async', false, true);
+var test4_error = event_test('src, 404, parser-inserted, no defer, async', false, true);
+
+var test3_dynamic_error = event_test('src, 404, not parser-inserted, no defer, no async, no non-blocking', false, true);
+var test4_dynamic_error = event_test('src, 404, not parser-inserted, no defer, async', false, true);
+
+var test6_load = event_test('no src, parser-inserted, no style sheets blocking scripts', false, false);
+
+var script3_dynamic_load = document.createElement('script');
+script3_dynamic_load.onload = () => onLoad(test3_dynamic_load);
+script3_dynamic_load.onerror = () => onError(test3_dynamic_load);
+script3_dynamic_load.async = false;
+script3_dynamic_load.src = "resources/load-error-events.py?test=test3_dynamic_load";
+document.head.appendChild(script3_dynamic_load);
+
+var script3_dynamic_error = document.createElement('script');
+script3_dynamic_error.onload = () => onLoad(test3_dynamic_error);
+script3_dynamic_error.onerror = () => onError(test3_dynamic_error);
+script3_dynamic_error.async = false;
+script3_dynamic_error.src = "resources/load-error-events.py?test=test3_dynamic_error";
+document.head.appendChild(script3_dynamic_error);
+
+var script4_dynamic_load = document.createElement('script');
+script4_dynamic_load.onload = () => onLoad(test4_dynamic_load);
+script4_dynamic_load.onerror = () => onError(test4_dynamic_load);
+script4_dynamic_load.async = true;
+script4_dynamic_load.src = "resources/load-error-events.py?test=test4_dynamic_load";
+document.head.appendChild(script4_dynamic_load);
+
+var script4_dynamic_error = document.createElement('script');
+script4_dynamic_error.onload = () => onLoad(test4_dynamic_error);
+script4_dynamic_error.onerror = () => onError(test4_dynamic_error);
+script4_dynamic_error.async = true;
+script4_dynamic_error.src = "resources/load-error-events.py?test=test4_dynamic_error";
+document.head.appendChild(script4_dynamic_error);
+</script>
+
+<script src="resources/load-error-events.py?test=test1_load" onload="onLoad(test1_load);" onerror="onError(test1_load);" defer></script>
+<script src="resources/load-error-events.py?test=test2_load" onload="onLoad(test2_load);" onerror="onError(test2_load);"></script>
+<script src="resources/load-error-events.py?test=test4_load" onload="onLoad(test4_load);" onerror="onError(test4_load);" async></script>
+<script src="resources/load-error-events.py?test=test1_error" onload="onLoad(test1_error);" onerror="onError(test1_error);" defer></script>
+<script src="resources/load-error-events.py?test=test2_error" onload="onLoad(test2_error);" onerror="onError(test2_error);"></script>
+<script src="resources/load-error-events.py?test=test4_error" onload="onLoad(test4_error);" onerror="onError(test4_error);" async></script>
+
+<script onload="onLoad(test6_load);" onerror="onError(test6_load);">
+"use strict";
+onExecute(test6_load);
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-2.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-2.html
new file mode 100644
index 0000000..cefa053
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-2.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<head>
+<title>load/error events for classic scripts with a style sheet that is blocking scripts</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/load-error-events-helpers.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#execute-the-script-block">
+<script>
+"use strict";
+var test5_load = event_test('no src, parser-inserted, has style sheets blocking scripts, script nesting level == 1', false, false);
+</script>
+
+<link rel="stylesheet" href="resources/slow.py"></link>
+<!-- This is testing the case where an inline classic script is inserted
+by parser while there is an loading stylesheet. Therefore, it is critical to
+place a <link rel="stylesheet"> just above the <script> to be tested. -->
+<script onload="onLoad(test5_load);" onerror="onError(test5_load);">
+"use strict";
+onExecute(test5_load);
+</script>
+</head>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-3.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-3.html
new file mode 100644
index 0000000..c2cf0db
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-error-events-3.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<head>
+<title>load/error events for classic scripts with a style sheet that is blocking scripts and script nesting level &gt; 1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/load-error-events-helpers.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#execute-the-script-block">
+</head>
+<script>
+"use strict";
+var test6_load = event_test('no src, parser-inserted, has style sheets blocking scripts, script nesting level == 2',
+    false, false);
+
+document.write(
+    `<link rel="stylesheet" href="resources/slow.py"></link>
+    <script onload="onLoad(test6_load);"
+        onerror="onError(test6_load);">
+    "use strict";
+    onExecute(test6_load);
+    </scr` + `ipt>`);
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-event.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-event.html
deleted file mode 100644
index 25c2ddf3..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/load-event.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<link rel="help" href="https://html.spec.whatwg.org/multipage/#execute-the-script-block">
-<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
-
-<script>
-"use strict";
-
-async_test(function(t) {
-    window.scriptExecuting = function () {
-        setTimeout(t.step_func_done(() => {
-            assert_equals(window.onloadHappened, undefined);
-        }), 0);
-    };
-}, "load events should not be fired for inline scripts");
-</script>
-
-
-<script onload="window.onloadHappened = true;">
-"use strict";
-window.scriptExecuting();
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html
new file mode 100644
index 0000000..c4dd0807
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<head>
+<title>load/error events for inline module scripts</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../resources/load-error-events-helpers.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#execute-the-script-block">
+</head>
+<script>
+"use strict";
+
+var test1_load = event_test('src, 200, parser-inserted, defer, no async', false, false);
+var test4_load = event_test('src, 200, parser-inserted, no defer, async', false, false);
+
+var test3_dynamic_load = event_test('src, 200, not parser-inserted, no defer, no async, no non-blocking', false, false);
+var test4_dynamic_load = event_test('src, 200, not parser-inserted, no defer, async', false, false);
+
+var test1_error = event_test('src, 404, parser-inserted, defer, no async', false, true);
+var test4_error = event_test('src, 404, parser-inserted, no defer, async', false, true);
+
+var test3_dynamic_error = event_test('src, 404, not parser-inserted, no defer, no async, no non-blocking', false, true);
+var test4_dynamic_error = event_test('src, 404, not parser-inserted, no defer, async', false, true);
+
+var script3_dynamic_load = document.createElement('script');
+script3_dynamic_load.setAttribute('type', 'module');
+script3_dynamic_load.onload = () => onLoad(test3_dynamic_load);
+script3_dynamic_load.onerror = () => onError(test3_dynamic_load);
+script3_dynamic_load.async = false;
+script3_dynamic_load.appendChild(document.createTextNode('onExecute(test3_dynamic_load);'));
+document.head.appendChild(script3_dynamic_load);
+
+var script3_dynamic_error = document.createElement('script');
+script3_dynamic_error.setAttribute('type', 'module');
+script3_dynamic_error.onload = () => onLoad(test3_dynamic_error);
+script3_dynamic_error.onerror = () => onError(test3_dynamic_error);
+script3_dynamic_error.async = false;
+script3_dynamic_error.appendChild(document.createTextNode('import "./not_found.js";'));
+document.head.appendChild(script3_dynamic_error);
+
+var script4_dynamic_load = document.createElement('script');
+script4_dynamic_load.setAttribute('type', 'module');
+script4_dynamic_load.onload = () => onLoad(test4_dynamic_load);
+script4_dynamic_load.onerror = () => onError(test4_dynamic_load);
+script4_dynamic_load.async = true;
+script4_dynamic_load.appendChild(document.createTextNode('onExecute(test4_dynamic_load);'));
+document.head.appendChild(script4_dynamic_load);
+
+var script4_dynamic_error = document.createElement('script');
+script4_dynamic_error.setAttribute('type', 'module');
+script4_dynamic_error.onload = () => onLoad(test4_dynamic_error);
+script4_dynamic_error.onerror = () => onError(test4_dynamic_error);
+script4_dynamic_error.async = true;
+script4_dynamic_error.appendChild(document.createTextNode('import "./not_found.js";'));
+document.head.appendChild(script4_dynamic_error);
+</script>
+
+<script onload="onLoad(test1_load);" onerror="onError(test1_load);" type="module">"use strict";onExecute(test1_load);</script>
+<script onload="onLoad(test4_load);" onerror="onError(test4_load);" type="module" async>"use strict";onExecute(test4_load);</script>
+<script onload="onLoad(test1_error);" onerror="onError(test1_error);" type="module">"use strict";import "./not_found.js";</script>
+<script onload="onLoad(test4_error);" onerror="onError(test4_error);" type="module" async>"use strict";import "./not_found.js";</script>
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/load-error-events.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/load-error-events.html
new file mode 100644
index 0000000..d9bf0522
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/module/load-error-events.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<head>
+<title>load/error events for external module scripts</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../resources/load-error-events-helpers.js"></script>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#execute-the-script-block">
+</head>
+<script>
+"use strict";
+
+var test1_load = event_test('src, 200, parser-inserted, defer, no async', true, false);
+var test4_load = event_test('src, 200, parser-inserted, no defer, async', true, false);
+
+var test3_dynamic_load = event_test('src, 200, not parser-inserted, no defer, no async, no non-blocking', true, false);
+var test4_dynamic_load = event_test('src, 200, not parser-inserted, no defer, async', true, false);
+
+var test1_error = event_test('src, 404, parser-inserted, defer, no async', false, true);
+var test4_error = event_test('src, 404, parser-inserted, no defer, async', false, true);
+
+var test3_dynamic_error = event_test('src, 404, not parser-inserted, no defer, no async, no non-blocking', false, true);
+var test4_dynamic_error = event_test('src, 404, not parser-inserted, no defer, async', false, true);
+
+var script3_dynamic_load = document.createElement('script');
+script3_dynamic_load.setAttribute('type', 'module');
+script3_dynamic_load.onload = () => onLoad(test3_dynamic_load);
+script3_dynamic_load.onerror = () => onError(test3_dynamic_load);
+script3_dynamic_load.async = false;
+script3_dynamic_load.src = "../resources/load-error-events.py?test=test3_dynamic_load";
+document.head.appendChild(script3_dynamic_load);
+
+var script3_dynamic_error = document.createElement('script');
+script3_dynamic_error.setAttribute('type', 'module');
+script3_dynamic_error.onload = () => onLoad(test3_dynamic_error);
+script3_dynamic_error.onerror = () => onError(test3_dynamic_error);
+script3_dynamic_error.async = false;
+script3_dynamic_error.src = "../resources/load-error-events.py?test=test3_dynamic_error";
+document.head.appendChild(script3_dynamic_error);
+
+var script4_dynamic_load = document.createElement('script');
+script4_dynamic_load.setAttribute('type', 'module');
+script4_dynamic_load.onload = () => onLoad(test4_dynamic_load);
+script4_dynamic_load.onerror = () => onError(test4_dynamic_load);
+script4_dynamic_load.async = true;
+script4_dynamic_load.src = "../resources/load-error-events.py?test=test4_dynamic_load";
+document.head.appendChild(script4_dynamic_load);
+
+var script4_dynamic_error = document.createElement('script');
+script4_dynamic_error.setAttribute('type', 'module');
+script4_dynamic_error.onload = () => onLoad(test4_dynamic_error);
+script4_dynamic_error.onerror = () => onError(test4_dynamic_error);
+script4_dynamic_error.async = true;
+script4_dynamic_error.src = "../resources/load-error-events.py?test=test4_dynamic_error";
+document.head.appendChild(script4_dynamic_error);
+</script>
+
+<script src="../resources/load-error-events.py?test=test1_load" onload="onLoad(test1_load);" onerror="onError(test1_load);" type="module"></script>
+<script src="../resources/load-error-events.py?test=test4_load" onload="onLoad(test4_load);" onerror="onError(test4_load);" type="module" async></script>
+<script src="../resources/load-error-events.py?test=test1_error" onload="onLoad(test1_error);" onerror="onError(test1_error);" type="module"></script>
+<script src="../resources/load-error-events.py?test=test4_error" onload="onLoad(test4_error);" onerror="onError(test4_error);" type="module" async></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/resources/load-error-events-helpers.js b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/resources/load-error-events-helpers.js
new file mode 100644
index 0000000..bbd6b09c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/resources/load-error-events-helpers.js
@@ -0,0 +1,47 @@
+"use strict";
+// Helper functions to be used from load-error-events*.html tests.
+
+function event_test(name, load_to_be_fired, error_to_be_fired) {
+  return {
+      test: async_test(name),
+      executed: false,
+      load_event_to_be_fired: load_to_be_fired,
+      error_event_to_be_fired: error_to_be_fired
+  };
+}
+
+// Should be used as load/error event handlers of script tags,
+// with |t| = the object returned by event_test().
+function onLoad(t) {
+    t.test.step(function() {
+        if (t.load_event_to_be_fired) {
+            assert_true(t.executed,
+                'Load event should be fired after script execution');
+            // Delay done() a little so that if an error event happens
+            // the assert_unreached is reached and fails the test.
+            t.test.step_timeout(() => t.test.done(), 100);
+        } else {
+            assert_unreached('Load event should not be fired.');
+        }
+    });
+};
+function onError(t) {
+    t.test.step(function() {
+        if (t.error_event_to_be_fired) {
+            assert_false(t.executed);
+            // Delay done() a little so that if a load event happens
+            // the assert_unreached is reached and fails the test.
+            t.test.step_timeout(() => t.test.done(), 100);
+        } else {
+            assert_unreached('Error event should not be fired.');
+        }
+    });
+};
+
+// To be called from inline scripts, which expect no load/error events.
+function onExecute(t) {
+    t.executed = true;
+    // Delay done() a little so that if a load/error event happens
+    // the assert_unreached is reached and fails the test.
+    t.test.step_timeout(() => t.test.done(), 100);
+}
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/resources/load-error-events.py b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/resources/load-error-events.py
new file mode 100644
index 0000000..8599087b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/resources/load-error-events.py
@@ -0,0 +1,15 @@
+import re
+
+def main(request, response):
+    headers = [("Content-Type", "text/javascript")]
+    test = request.GET.first('test')
+    assert(re.match('^[a-zA-Z0-9_]+$', test));
+
+    if test.find('_load') >= 0:
+      status = 200
+      content = '"use strict"; %s.executed = true;' % test
+    else:
+      status = 404
+      content = '"use strict"; %s.test.step(function() { assert_unreached("404 script should not be executed"); });' % test
+
+    return status, headers, content
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/resources/slow.py b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/resources/slow.py
new file mode 100644
index 0000000..f3b1c7e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/scripting-1/the-script-element/resources/slow.py
@@ -0,0 +1,5 @@
+import time
+
+def main(request, response):
+    time.sleep(2)
+    return 200, [], ''
diff --git a/third_party/WebKit/LayoutTests/fast/css/sticky/sticky-grid-expected.html b/third_party/WebKit/LayoutTests/fast/css/sticky/sticky-grid-expected.html
deleted file mode 100644
index b713f1c..0000000
--- a/third_party/WebKit/LayoutTests/fast/css/sticky/sticky-grid-expected.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-<head>
-<style>
-    body {
-        margin: 0;
-        width: 2000px;
-        overflow: hidden; /* hide scrollbars */
-    }
-
-    p {
-        position: relative;
-        left: 100px;
-    }
-
-    .group {
-        position: relative;
-        width: 500px;
-        height: 200px;
-    }
-
-    .grid-container {
-        display: grid;
-        grid-template-columns: 50% 50%;
-        grid-template-rows: 100%;
-        width: 200px;
-        height: 180px;
-        outline: 2px solid black;
-    }
- 
-    .box {
-        width: 100px;
-        height: 180px;
-    }
-
-    .grid-item {
-        width: 100%;
-        height: 100%;
-    }
-
-    .sticky {
-        left: 100px;
-        background-color: green;
-    }
-</style>
-<script>
-    function doTest()
-    {
-        window.scrollTo(100, 0);
-    }
-    window.addEventListener('load', doTest, false);
-</script>
-</head>
-<body>
-    <p>This test checks the behavior of position:sticky with grid items.
-  There should be no red.</p>
-
-    <div class="group" style="left: 100px">
-        <div class="grid-container" style="left: 100px">
-          <div class="sticky grid-item" style="grid-column: 2; grid-row: 1;"></div>
-          <div class="grid-item" style="grid-column: 1; grid-row: 1;"></div>
-        </div>
-    </div>
-
-    <div class="group" style="left: 150px">
-        <div class="grid-container" style="left: 100px; grid-template-columns: 25% 50% 25%">
-          <div class="sticky grid-item" style="grid-column: 2; grid-row: 1;"></div>
-          <div class="grid-item" style="grid-column: 3; grid-row: 1;"></div>
-        </div>
-    </div>
-
-    <div class="group" style="left: 200px">
-        <div class="grid-container" style="left: 100px">
-          <div class="sticky grid-item" style="grid-column: 1; grid-row: 1;"></div>
-          <div class="grid-item" style="grid-column: 2; grid-row: 1;"></div>
-        </div>
-    </div>
-
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/fast/css/sticky/sticky-grid.html b/third_party/WebKit/LayoutTests/fast/css/sticky/sticky-grid.html
deleted file mode 100644
index 527dabb..0000000
--- a/third_party/WebKit/LayoutTests/fast/css/sticky/sticky-grid.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html>
-<script>
-if (window.internals) {
-    internals.settings.setCSSStickyPositionEnabled(true);
-}           
-</script>
-
-<html>
-<head>
-<style>
-    body {
-        margin: 0;
-        width: 2000px;
-        overflow: hidden; /* hide scrollbars */
-    }
-
-    p {
-        position: relative;
-        left: 100px;
-    }
-
-    .group {
-        position: relative;
-        width: 500px;
-        height: 200px;
-    }
-
-    .grid-container {
-        display: grid;
-        grid-template-columns: 50% 50%;
-        grid-template-rows: 100%;
-        width: 200px;
-        height: 180px;
-        outline: 2px solid black;
-    }
- 
-    .box {
-        width: 100px;
-        height: 180px;
-    }
-
-    .grid-item {
-        width: 100%;
-        height: 100%;
-    }
-
-    .sticky {
-        position: sticky;
-        left: 100px;
-        background-color: green;
-    }
-
-    .indicator {
-        position: absolute;
-        top: 0;
-        left: 0;
-        background-color: red;
-    }
-</style>
-<script>
-    function doTest()
-    {
-        window.scrollTo(100, 0);
-    }
-    window.addEventListener('load', doTest, false);
-</script>
-</head>
-<body>
-    <p>This test checks the behavior of position:sticky with grid items.
-  There should be no red.</p>
-
-    <div class="group" style="left: 100px">
-        <div class="indicator box" style="left: 100px;"></div>
-        <div class="grid-container">
-          <div class="sticky grid-item" style="grid-column: 1; grid-row: 1;"></div>
-          <div class="grid-item" style="grid-column: 2; grid-row: 1;"></div>
-        </div>
-    </div>
-
-    <div class="group" style="left: 150px">
-        <div class="indicator box" style="left: 50px;"></div>
-        <div class="grid-container" style="left: 100px">
-          <div class="sticky grid-item" style="grid-column: 1; grid-row: 1;"></div>
-          <div class="grid-item" style="grid-column: 2; grid-row: 1;"></div>
-        </div>
-    </div>
-
-    <div class="group" style="left: 200px">
-        <div class="indicator box" style="left: 0px;"></div>
-        <div class="grid-container" style="left: 100px">
-          <div class="sticky grid-item" style="grid-column: 1; grid-row: 1;"></div>
-          <div class="grid-item" style="grid-column: 2; grid-row: 1;"></div>
-        </div>
-    </div>
-
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/fast/js/mozilla/strict/B.1.2-expected.txt b/third_party/WebKit/LayoutTests/fast/js/mozilla/strict/B.1.2-expected.txt
index 2a60797..37d2bcfb3 100644
--- a/third_party/WebKit/LayoutTests/fast/js/mozilla/strict/B.1.2-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/js/mozilla/strict/B.1.2-expected.txt
@@ -7,7 +7,7 @@
 PASS Function("'use strict'; \"\\1\"") threw exception of type SyntaxError.
 PASS !!Function("\"\\1\"") is true
 PASS true === true
-FAIL Function("'use strict'; \"\\08\"") should throw an instance of SyntaxError
+PASS Function("'use strict'; \"\\08\"") threw exception of type SyntaxError.
 PASS !!Function("\"\\08\"") is true
 PASS true === true
 PASS !!Function("'use strict'; \"\\0\"") is true
diff --git a/third_party/WebKit/LayoutTests/fast/rootscroller/root-scroller-apply-filter-to-parent-expected.html b/third_party/WebKit/LayoutTests/fast/rootscroller/root-scroller-apply-filter-to-parent-expected.html
new file mode 100644
index 0000000..0c8a801
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/rootscroller/root-scroller-apply-filter-to-parent-expected.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<style>
+  ::-webkit-scrollbar {
+    width: 0px;
+    height: 0px;
+  }
+
+  body, html {
+    width: 100%;
+    height: 100%;
+  }
+
+  body {
+    margin: 0px;
+  }
+
+  #rootscroller {
+    width: 100%;
+    height: 100%;
+    overflow: auto;
+    will-change: transform;
+    background-image:linear-gradient(0deg, transparent 50%, #0a0 50%),
+                     linear-gradient(90deg, #a00 50%, #0a0 50%);
+    background-size:75px 75px,75px 75px;
+    background-position:0 0, 0 25px;
+  }
+
+  #parent {
+    width: 100%;
+    height: 100%;
+    filter: sepia(100);
+  }
+
+  .spacer {
+    margin: 50px;
+    width: 20px;
+    height: 50%;
+    background-color: blue;
+  }
+</style>
+
+<div id="parent">
+  <div id="rootscroller">
+    <div class="spacer">
+    </div>
+  </div>
+</div>
diff --git a/third_party/WebKit/LayoutTests/fast/rootscroller/root-scroller-apply-filter-to-parent.html b/third_party/WebKit/LayoutTests/fast/rootscroller/root-scroller-apply-filter-to-parent.html
new file mode 100644
index 0000000..e443628
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/rootscroller/root-scroller-apply-filter-to-parent.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<style>
+  ::-webkit-scrollbar {
+    width: 0px;
+    height: 0px;
+  }
+
+  body, html {
+    width: 100%;
+    height: 100%;
+  }
+
+  body {
+    margin: 0px;
+  }
+
+  #rootscroller {
+    width: 100%;
+    height: 100%;
+    overflow: auto;
+    will-change: transform;
+    background-image:linear-gradient(0deg, transparent 50%, #0a0 50%),
+                     linear-gradient(90deg, #a00 50%, #0a0 50%);
+    background-size:75px 75px,75px 75px;
+    background-position:0 0, 0 25px;
+  }
+
+  #parent {
+    width: 100%;
+    height: 100%;
+  }
+
+  .spacer {
+    margin: 50px;
+    width: 20px;
+    height: 50%;
+    background-color: blue;
+  }
+</style>
+
+<!--The root scroller and its child are colorful. The test applies a filter to
+root scroller's parent. It passes if the output is entirely sepia colored.-->
+<div id="parent">
+  <div id="rootscroller">
+    <div class="spacer">
+    </div>
+  </div>
+</div>
+
+<script>
+  window.onload = function() {
+    var parent = document.querySelector('#parent');
+    var rootscroller = document.querySelector('#rootscroller');
+
+    document.rootScroller = rootscroller;
+    parent.style.filter = "sepia(100)";
+  }
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/fast/scrolling/scroll-non-descendant-of-root-scroller.html b/third_party/WebKit/LayoutTests/fast/rootscroller/scroll-non-descendant-of-root-scroller.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/fast/scrolling/scroll-non-descendant-of-root-scroller.html
rename to third_party/WebKit/LayoutTests/fast/rootscroller/scroll-non-descendant-of-root-scroller.html
diff --git a/third_party/WebKit/LayoutTests/fast/scrolling/set-root-scroller.html b/third_party/WebKit/LayoutTests/fast/rootscroller/set-root-scroller.html
similarity index 100%
rename from third_party/WebKit/LayoutTests/fast/scrolling/set-root-scroller.html
rename to third_party/WebKit/LayoutTests/fast/rootscroller/set-root-scroller.html
diff --git a/third_party/WebKit/LayoutTests/fast/scrolling/root-scroller-apply-filter-to-parent-expected.html b/third_party/WebKit/LayoutTests/fast/scrolling/root-scroller-apply-filter-to-parent-expected.html
deleted file mode 100644
index 57f52fe..0000000
--- a/third_party/WebKit/LayoutTests/fast/scrolling/root-scroller-apply-filter-to-parent-expected.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html>
-<style>
-  ::-webkit-scrollbar {
-    width: 0px;
-    height: 0px;
-  }
-
-  body, html {
-    width: 100%;
-    height: 100%;
-  }
-
-  body {
-    margin: 0px;
-  }
-
-  #rootscroller {
-    width: 100%;
-    height: 100%;
-    overflow: auto;
-    will-change: transform;
-    background-image:linear-gradient(0deg, transparent 50%, #0a0 50%),
-                     linear-gradient(90deg, #a00 50%, #0a0 50%);
-    background-size:75px 75px,75px 75px;
-    background-position:0 0, 0 25px;
-  }
-
-  #parent {
-    width: 100%;
-    height: 100%;
-    filter: sepia(100);
-  }
-
-  .spacer {
-    margin: 50px;
-    width: 20px;
-    height: 2000px;
-    background-color: blue;
-  }
-</style>
-
-<div id="parent">
-  <div id="rootscroller">
-    <div class="spacer">
-    </div>
-  </div>
-</div>
diff --git a/third_party/WebKit/LayoutTests/fast/scrolling/root-scroller-apply-filter-to-parent.html b/third_party/WebKit/LayoutTests/fast/scrolling/root-scroller-apply-filter-to-parent.html
deleted file mode 100644
index ee98401..0000000
--- a/third_party/WebKit/LayoutTests/fast/scrolling/root-scroller-apply-filter-to-parent.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE html>
-<style>
-  ::-webkit-scrollbar {
-    width: 0px;
-    height: 0px;
-  }
-
-  body, html {
-    width: 100%;
-    height: 100%;
-  }
-
-  body {
-    margin: 0px;
-  }
-
-  #rootscroller {
-    width: 100%;
-    height: 100%;
-    overflow: auto;
-    will-change: transform;
-    background-image:linear-gradient(0deg, transparent 50%, #0a0 50%),
-                     linear-gradient(90deg, #a00 50%, #0a0 50%);
-    background-size:75px 75px,75px 75px;
-    background-position:0 0, 0 25px;
-  }
-
-  #parent {
-    width: 100%;
-    height: 100%;
-  }
-
-  .spacer {
-    margin: 50px;
-    width: 20px;
-    height: 2000px;
-    background-color: blue;
-  }
-</style>
-
-<!--The root scroller and its child are colorful. The test applies a filter to
-root scroller's parent. It passes if the output is entirely sepia colored.-->
-<div id="parent">
-  <div id="rootscroller">
-    <div class="spacer">
-    </div>
-  </div>
-</div>
-
-<script>
-  window.onload = function() {
-    var parent = document.querySelector('#parent');
-    var rootscroller = document.querySelector('#rootscroller');
-
-    document.rootScroller = rootscroller;
-    parent.style.filter = "sepia(100)";
-  }
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-background-image-expected.txt b/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-background-image-expected.txt
deleted file mode 100644
index 25e2f98..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-background-image-expected.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-CONSOLE MESSAGE: line 26: The worklet should log: 'width: 100, height: 100'
-CONSOLE MESSAGE: line 6: width: 100, height: 100
-CONSOLE MESSAGE: line 26: The worklet should log: 'width: 200, height: 200'
-CONSOLE MESSAGE: line 6: width: 200, height: 200
-CONSOLE MESSAGE: line 26: The worklet should log: 'width: 100, height: 100'
-CONSOLE MESSAGE: line 6: width: 100, height: 100
-This tests the geometry information in the paint callback.
-
-See the devtools console for test output.
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-background-image-tiled-expected.txt b/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-background-image-tiled-expected.txt
deleted file mode 100644
index 00c14caa..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-background-image-tiled-expected.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-CONSOLE MESSAGE: line 26: The worklet should log: 'width: 50, height: 50'
-CONSOLE MESSAGE: line 6: width: 50, height: 50
-CONSOLE MESSAGE: line 26: The worklet should log: 'width: 50, height: 20'
-CONSOLE MESSAGE: line 6: width: 50, height: 20
-CONSOLE MESSAGE: line 26: The worklet should log: 'width: 60, height: 80'
-CONSOLE MESSAGE: line 6: width: 60, height: 80
-This tests the geometry information in the paint callback.
-
-See the devtools console for test output.
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-background-image-tiled.html b/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-background-image-tiled.html
deleted file mode 100644
index ada07f5..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-background-image-tiled.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<script src="../resources/run-after-layout-and-paint.js"></script>
-<script src="resources/test-runner-geometry-logging.js"></script>
-<style>
-    div {
-        background-color: red;
-    }
-</style>
-<script>
-function runTest() {
-    testRunnerGeometryLogging([{
-        func: function(el) {
-            el.style.width = '100px';
-            el.style.height = '100px';
-            el.style.background = 'paint(logging-green) top left/50% 50% repeat-x';
-        },
-        expected: {width: 50, height: 50},
-    }, {
-        func: function(el) {
-            el.style.width = '100px';
-            el.style.height = '100px';
-            el.style.background = 'paint(logging-green) center right/50% 20% no-repeat';
-        },
-        expected: {width: 50, height: 20},
-    }, {
-        func: function(el) {
-            el.style.width = '100px';
-            el.style.height = '100px';
-            el.style.background = 'paint(logging-green) center center/60px 80px no-repeat';
-        },
-        expected: {width: 60, height: 80},
-    }]);
-}
-</script>
-</head>
-<body onload="runTest()">
-<p>This tests the geometry information in the paint callback.</p>
-<p>See the devtools console for test output.</p>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-background-image.html b/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-background-image.html
deleted file mode 100644
index 07c995b..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-background-image.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<script src="../resources/run-after-layout-and-paint.js"></script>
-<script src="resources/test-runner-geometry-logging.js"></script>
-<style>
-    div {
-        background-image: paint(logging-green);
-        background-color: red;
-    }
-</style>
-<script>
-function runTest() {
-    testRunnerGeometryLogging([{
-        func: function(el) {
-            el.style.width = '100px';
-            el.style.height = '100px';
-        },
-        expected: {width: 100, height: 100},
-    }, {
-        func: function(el) {
-            el.style.width = '200px';
-            el.style.height = '200px';
-        },
-        expected: {width: 200, height: 200},
-    }, {
-        func: function(el) {
-            el.style.width = '100px';
-            el.style.height = '100px';
-            if (window.internals)
-                window.internals.setPageScaleFactor(2);
-        },
-        expected: {width: 100, height: 100},
-    }]);
-}
-</script>
-</head>
-<body onload="runTest()">
-<p>This tests the geometry information in the paint callback.</p>
-<p>See the devtools console for test output.</p>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-border-image-expected.txt b/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-border-image-expected.txt
deleted file mode 100644
index a8ea962..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-border-image-expected.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-CONSOLE MESSAGE: line 26: The worklet should log: 'width: 100, height: 100'
-CONSOLE MESSAGE: line 6: width: 100, height: 100
-CONSOLE MESSAGE: line 26: The worklet should log: 'width: 220, height: 220'
-CONSOLE MESSAGE: line 6: width: 220, height: 220
-CONSOLE MESSAGE: line 26: The worklet should log: 'width: 90, height: 90'
-CONSOLE MESSAGE: line 6: width: 90, height: 90
-CONSOLE MESSAGE: line 26: The worklet should log: 'width: 80, height: 120'
-CONSOLE MESSAGE: line 6: width: 80, height: 120
-CONSOLE MESSAGE: line 26: The worklet should log: 'width: 140, height: 140'
-CONSOLE MESSAGE: line 6: width: 140, height: 140
-CONSOLE MESSAGE: line 26: The worklet should log: 'width: 120, height: 120'
-CONSOLE MESSAGE: line 6: width: 120, height: 120
-This tests the geometry information in the paint callback.
-
-See the devtools console for test output.
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-border-image.html b/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-border-image.html
deleted file mode 100644
index d5a33984..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/geometry-border-image.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<script src="../resources/run-after-layout-and-paint.js"></script>
-<script src="resources/test-runner-geometry-logging.js"></script>
-<style>
-    div {
-        border: solid 0;
-        border-image: paint(logging-green);
-        border-image-slice: 0 fill;
-        background-color: red;
-    }
-</style>
-<script>
-function runTest() {
-    testRunnerGeometryLogging([{
-        func: function(el) {
-            el.style.width = '100px';
-            el.style.height = '100px';
-        },
-        expected: {width: 100, height: 100},
-    }, {
-        func: function(el) {
-            el.style.width = '200px';
-            el.style.height = '200px';
-            el.style.borderWidth = '10px';
-        },
-        expected: {width: 220, height: 220},
-    }, {
-        func: function(el) {
-            el.style.width = '50px';
-            el.style.height = '50px';
-            el.style.borderImageOutset = '20px';
-        },
-        expected: {width: 90, height: 90},
-    }, {
-        func: function(el) {
-            el.style.width = '60px';
-            el.style.height = '100px';
-            el.style.borderImageOutset = '10px';
-        },
-        expected: {width: 80, height: 120},
-    }, {
-        func: function(el) {
-            el.style.width = '100px';
-            el.style.height = '100px';
-            el.style.borderWidth = '10px';
-            el.style.borderImageOutset = '10px';
-        },
-        expected: {width: 140, height: 140},
-    }, {
-        func: function(el) {
-            el.style.width = '100px';
-            el.style.height = '100px';
-            el.style.borderImageOutset = '10px';
-            if (window.internals)
-                window.internals.setPageScaleFactor(2);
-        },
-        expected: {width: 120, height: 120},
-    }]);
-}
-</script>
-</head>
-<body onload="runTest()">
-<p>This tests the geometry information in the paint callback.</p>
-<p>See the devtools console for test output.</p>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/paint2d-zoom-expected.png b/third_party/WebKit/LayoutTests/http/tests/csspaint/paint2d-zoom-expected.png
deleted file mode 100644
index 0fd690d..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/paint2d-zoom-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/paint2d-zoom-expected.txt b/third_party/WebKit/LayoutTests/http/tests/csspaint/paint2d-zoom-expected.txt
deleted file mode 100644
index 61418eaf..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/paint2d-zoom-expected.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-CONSOLE MESSAGE: line 31: The worklet should log: 'width: 100, height: 100'
-CONSOLE MESSAGE: line 8: width: 100, height: 100
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x348
-  LayoutBlockFlow {HTML} at (0,0) size 800x348
-    LayoutBlockFlow {BODY} at (24,24) size 752x300
-      LayoutBlockFlow {DIV} at (0,0) size 300x300
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/paint2d-zoom.html b/third_party/WebKit/LayoutTests/http/tests/csspaint/paint2d-zoom.html
deleted file mode 100644
index ba22299..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/paint2d-zoom.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<script src="../resources/run-after-layout-and-paint.js"></script>
-<script src="resources/test-runner-paint-worklet.js"></script>
-<style>
-    #output {
-        width: 100px;
-        height: 100px;
-        background-image: paint(worklet);
-    }
-</style>
-</head>
-<body>
-<div id="output"></div>
-
-<script id="code" type="text/worklet">
-registerPaint('worklet', class {
-    paint(ctx, geom) {
-         ctx.rotate(10 * Math.PI / 180);
-         ctx.strokeStyle = 'blue';
-         ctx.lineWidth = 4;
-         ctx.strokeRect(30, 10, 30, 30);
-         console.log('width: ' + geom.width + ', height: ' + geom.height);
-    }
-});
-</script>
-
-<script>
-    document.body.style.zoom = "300%";
-    console.log('The worklet should log: \'width: 100, height: 100\'');
-    importPaintWorkletAndTerminateTestAfterAsyncPaint(document.getElementById('code').textContent);
-</script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/parse-input-arguments-expected.txt b/third_party/WebKit/LayoutTests/http/tests/csspaint/parse-input-arguments-expected.txt
deleted file mode 100644
index 5f2e37e..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/parse-input-arguments-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-CONSOLE MESSAGE: line 15: The worklet should throw an error with: "failed!"
-CONSOLE ERROR: line 1: Uncaught Error: failed!
-CONSOLE MESSAGE: line 15: The worklet should throw an error with: " Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The value provided is neither an array, nor does it have indexed properties."
-CONSOLE ERROR: line 1: Uncaught TypeError: Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The provided value cannot be converted to a sequence.
-CONSOLE MESSAGE: line 15: The worklet should throw an error with: "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': Invalid argument types."
-CONSOLE ERROR: line 1: Uncaught TypeError: Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': Invalid argument types.
-CONSOLE MESSAGE: line 19: The worklet should not throw an error.
-CONSOLE MESSAGE: line 1: Success for 'foo'.
-This tests a series of PaintWorkletGlobalScope#registerPaint Parse Input Arguments calls.
-
-See the devtools console for test output.
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/parse-input-arguments.html b/third_party/WebKit/LayoutTests/http/tests/csspaint/parse-input-arguments.html
deleted file mode 100644
index b78db59d..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/parse-input-arguments.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<script src="resources/test-runner-paint-helper.js"></script>
-<script>
-function runTest() {
-    runner([{
-      expectedError: "failed!",
-      script: "registerPaint('foo', class { static get inputArguments() { throw Error('failed!'); } });",
-    }, {
-      expectedError: " Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The value provided is neither an array, nor does it have indexed properties.",
-      script: "registerPaint('foo1', class { static get inputArguments() { return 'non sense stuff'; } });",
-    }, {
-      expectedError: "Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': Invalid argument types.",
-      script: "registerPaint('foo2', class { static get inputArguments() { return ['<non-sense-type>'] } });",
-    }, {
-      script: "registerPaint('foo3', class { static get inputArguments(){return ['<length>'];} paint() { } }); console.log('Success for \\'foo\\'.');",
-    }]);
-}
-</script>
-</head>
-<body onload="runTest()">
-<p>This tests a series of PaintWorkletGlobalScope#registerPaint Parse Input Arguments calls.</p>
-<p>See the devtools console for test output.</p>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/registerPaint-expected.txt b/third_party/WebKit/LayoutTests/http/tests/csspaint/registerPaint-expected.txt
deleted file mode 100644
index f53037a..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/registerPaint-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-CONSOLE MESSAGE: line 15: The worklet should throw an error with: "A class with name:'foo' is already registered."
-CONSOLE ERROR: line 1: Uncaught NotSupportedError: Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': A class with name:'foo' is already registered.
-CONSOLE MESSAGE: line 15: The worklet should throw an error with: "The empty string is not a valid name."
-CONSOLE ERROR: line 1: Uncaught TypeError: Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The empty string is not a valid name.
-CONSOLE MESSAGE: line 15: The worklet should throw an error with: "failed!"
-CONSOLE ERROR: line 1: Uncaught Error: failed!
-CONSOLE MESSAGE: line 15: The worklet should throw an error with: "The value provided is neither an array, nor does it have indexed properties."
-CONSOLE ERROR: line 1: Uncaught TypeError: Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The provided value cannot be converted to a sequence.
-CONSOLE MESSAGE: line 15: The worklet should throw an error with: "The 'prototype' object on the class does not exist."
-CONSOLE ERROR: line 1: Uncaught TypeError: Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The 'prototype' object on the class does not exist.
-CONSOLE MESSAGE: line 15: The worklet should throw an error with: "The 'prototype' property on the class is not an object."
-CONSOLE ERROR: line 1: Uncaught TypeError: Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The 'prototype' property on the class is not an object.
-CONSOLE MESSAGE: line 15: The worklet should throw an error with: "The 'paint' function on the prototype does not exist."
-CONSOLE ERROR: line 1: Uncaught TypeError: Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The 'paint' function on the prototype does not exist.
-CONSOLE MESSAGE: line 15: The worklet should throw an error with: "The 'paint' property on the prototype is not a function."
-CONSOLE ERROR: line 1: Uncaught TypeError: Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The 'paint' property on the prototype is not a function.
-CONSOLE MESSAGE: line 19: The worklet should not throw an error.
-CONSOLE MESSAGE: line 1: Success for 'foo9'.
-CONSOLE MESSAGE: line 19: The worklet should not throw an error.
-CONSOLE MESSAGE: line 1: Success for 'foo10'.
-CONSOLE MESSAGE: line 19: The worklet should not throw an error.
-CONSOLE MESSAGE: line 1: Success for 'foo11'.
-CONSOLE MESSAGE: line 15: The worklet should throw an error with: "The 'alpha' property on the class is not a boolean."
-CONSOLE ERROR: line 1: Uncaught TypeError: Failed to execute 'registerPaint' on 'PaintWorkletGlobalScope': The 'alpha' property on the class is not a boolean.
-CONSOLE MESSAGE: line 19: The worklet should not throw an error.
-CONSOLE MESSAGE: line 1: Success for 'foo13'.
-This tests a series of PaintWorkletGlobalScope#registerPaint calls.
-
-See the devtools console for test output.
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/registerPaint.html b/third_party/WebKit/LayoutTests/http/tests/csspaint/registerPaint.html
deleted file mode 100644
index 8f09056..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/registerPaint.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<script src="resources/test-runner-paint-helper.js"></script>
-<script>
-function runTest() {
-    runner([{
-        expectedError: "A class with name:'foo' is already registered.",
-        script: "registerPaint('foo', class { paint() { } }); registerPaint('foo', class { paint() { } });",
-    }, {
-        expectedError: "The empty string is not a valid name.",
-        script: "registerPaint('', class { });",
-    }, {
-        expectedError: "failed!",
-        script: "registerPaint('foo3', class { static get inputProperties() { throw Error('failed!'); } });",
-    }, {
-        expectedError: "The value provided is neither an array, nor does it have indexed properties.",
-        script: "registerPaint('foo4', class { static get inputProperties() { return 42; } });",
-    }, {
-        expectedError: "The 'prototype' object on the class does not exist.",
-        script: "var a = function() { }; a.prototype = undefined; registerPaint('foo5', a);",
-    }, {
-        expectedError: "The 'prototype' property on the class is not an object.",
-        script: "var b = function() { }; b.prototype = 42; registerPaint('foo6', b);",
-    }, {
-        expectedError: "The 'paint' function on the prototype does not exist.",
-        script: "registerPaint('foo7', class { });",
-    }, {
-        expectedError: "The 'paint' property on the prototype is not a function.",
-        script: "registerPaint('foo8', class { get paint() { return 42; } });",
-    }, {
-        script: "registerPaint('foo9', class { paint() { } }); console.log('Success for \\'foo9\\'.');",
-    }, {
-        script: "var c = function() { }; c.prototype.paint = function() { }; registerPaint('foo10', c); console.log('Success for \\'foo10\\'.');",
-    }, {
-        script: "registerPaint('foo11', class { static get inputProperties() { return ['-webkit-border-radius']; } paint() { } }); console.log('Success for \\'foo11\\'.');"
-    }, {
-        expectedError: "The 'alpha' property on the class is not a boolean.",
-        script: "registerPaint('foo12', class { static get alpha() { return 42; } });",
-    }, {
-        script: "registerPaint('foo13', class { static get alpha() { return true; } paint() { } }); console.log('Success for \\'foo13\\'.');",
-    }]);
-}
-</script>
-</head>
-<body onload="runTest()">
-<p>This tests a series of PaintWorkletGlobalScope#registerPaint calls.</p>
-<p>See the devtools console for test output.</p>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/registered-properties-in-custom-paint-expected.txt b/third_party/WebKit/LayoutTests/http/tests/csspaint/registered-properties-in-custom-paint-expected.txt
deleted file mode 100644
index 54ddb494..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/registered-properties-in-custom-paint-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-CONSOLE MESSAGE: line 14: --length: [CSSUnitValue=10px]
-CONSOLE MESSAGE: line 14: --length-initial: [CSSUnitValue=20px]
-CONSOLE MESSAGE: line 14: --number: [CSSStyleValue=10]
-This tests the style information in the paint callback.
-
-See the devtools console for test output. The console should log:
-
---length: [CSSUnitValue=10px]
---length-initial: [CSSUnitValue=20px]
---number: [CSSStyleValue=10]
-
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/registered-properties-in-custom-paint.html b/third_party/WebKit/LayoutTests/http/tests/csspaint/registered-properties-in-custom-paint.html
deleted file mode 100644
index 7aaaed0..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/registered-properties-in-custom-paint.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<script src="../resources/run-after-layout-and-paint.js"></script>
-<script src="resources/test-runner-paint-worklet.js"></script>
-<script src="resources/generate-paint-style-logging.js"></script>
-<style>
-    div {
-        width: 100px;
-        height: 100px;
-
-        background-image: paint(test);
-
-        --length: 10px;
-        --number: 10;
-    }
-</style>
-</head>
-<body>
-<div></div>
-<script>
-    if (window.testRunner)
-        testRunner.dumpAsText();
-
-    CSS.registerProperty({name: '--length', syntax: '<length>', initialValue: '0px'});
-    CSS.registerProperty({name: '--length-initial', syntax: '<length>', initialValue: '20px'});
-    CSS.registerProperty({name: '--number', syntax: '<number>', initialValue: '0'});
-
-    importPaintWorkletAndTerminateTestAfterAsyncPaint(
-            generatePaintStyleLogging([
-                '--length',
-                '--length-initial',
-                '--number',
-            ]));
-</script>
-<p>This tests the style information in the paint callback.</p>
-<p>See the devtools console for test output. The console should log:</p>
---length: [CSSUnitValue=10px]<br>
---length-initial: [CSSUnitValue=20px]<br>
---number: [CSSStyleValue=10]<br>
-
-</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/generate-paint-style-logging.js b/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/generate-paint-style-logging.js
deleted file mode 100644
index f66b775d..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/generate-paint-style-logging.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// Generates code for a CSS paint API function which logs the given properties
-// to the console.
-//
-// Usage:
-// generatePaintStyleLogging([
-//      '--foo',
-//      'line-height',
-// ]);
-
-function generatePaintStyleLogging(properties) {
-    const json = JSON.stringify(properties);
-    return `
-        registerPaint('test', class {
-            static get inputProperties() { return ${json}; }
-            paint(ctx, geom, styleMap) {
-                const properties = styleMap.getProperties().sort();
-                for (let i = 0; i < properties.length; i++) {
-                    const value = styleMap.get(properties[i]);
-                    let serialized;
-                    if (value) {
-                        serialized = '[' + value.constructor.name + '=' + value.toString() + ']';
-                    } else {
-                        serialized = '[null]';
-                    }
-                    console.log(properties[i] + ': ' + serialized);
-                }
-            }
-        });
-    `;
-}
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/html5.png b/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/html5.png
deleted file mode 100644
index e344192..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/html5.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/paint-logging-green.js b/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/paint-logging-green.js
deleted file mode 100644
index ab36fda6..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/paint-logging-green.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// Logs the size of the geometry to the console.
-// Fills the context with a green square.
-
-registerPaint('logging-green', class {
-    paint(ctx, geom) {
-        console.log('width: ' + geom.width + ', height: ' + geom.height);
-        ctx.fillStyle = 'green';
-        ctx.fillRect(0, 0, geom.width, geom.height);
-    }
-});
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/test-runner-geometry-logging.js b/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/test-runner-geometry-logging.js
deleted file mode 100644
index e2ce067..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/test-runner-geometry-logging.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// Test runner for the paint worklet.
-//
-// Calls a given function with a newly created element, and prints the expected
-// geometry to the console.
-//
-// Runs each test sequentially after a layout and a paint.
-//
-// Usage:
-// testRunnerGeometryLogging([{
-//      func: function(el) {
-//          el.style.width = '100px';
-//          el.style.height = '100px';
-//      },
-//      expected: {width: 100, height: 100},
-// ]);
-
-function testRunnerGeometryLogging(tests, workletCode) {
-    if (window.testRunner) {
-        testRunner.waitUntilDone();
-        testRunner.dumpAsText();
-    }
-
-    paintWorklet.addModule('resources/paint-logging-green.js').then(function() {
-        tests.reduce(function(chain, obj) {
-            return chain.then(function() {
-                console.log('The worklet should log: \'width: ' + obj.expected.width + ', height: ' + obj.expected.height + '\'');
-                var el = document.createElement('div');
-                document.body.appendChild(el);
-                obj.func(el);
-                return new Promise(function(resolve) {
-                    runAfterLayoutAndPaint(function() {
-                        document.body.removeChild(el);
-                        resolve();
-                    });
-                });
-            });
-        }, Promise.resolve()).then(function() {
-            if (window.testRunner) {
-                testRunner.notifyDone();
-            }
-        });
-    });
-}
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/test-runner-paint-helper.js b/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/test-runner-paint-helper.js
deleted file mode 100644
index e7aec3d..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/resources/test-runner-paint-helper.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Given a set of 'tests', runs them in the worklet, then comparing the
-// expectedError or the expectedMessage.
-//
-// Usage:
-//   runner([{/* test1 */}, { /* test2 */}]);
-function runner(tests) {
-    if (window.testRunner) {
-        testRunner.waitUntilDone();
-        testRunner.dumpAsText();
-    }
-
-    tests.reduce(function(chain, obj) {
-        return chain.then(function() {
-            if (obj.expectedError) {
-                console.log('The worklet should throw an error with: "' + obj.expectedError + '"');
-            } else if (obj.expectedMessage) {
-                console.log('The worklet should log a warning with: "' + obj.expectedMessage + '"');
-            } else {
-                console.log('The worklet should not throw an error.');
-            }
-            var blob = new Blob([obj.script], {type: 'text/javascript'});
-            return paintWorklet.addModule(URL.createObjectURL(blob));
-        });
-    }, Promise.resolve()).then(function() {
-        if (window.testRunner) {
-            testRunner.notifyDone();
-        }
-    });
-}
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/style-background-image-expected.txt b/third_party/WebKit/LayoutTests/http/tests/csspaint/style-background-image-expected.txt
deleted file mode 100644
index 65fd4a2..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/style-background-image-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-CONSOLE MESSAGE: line 14: --bar: [null]
-CONSOLE MESSAGE: line 14: --foo: [CSSStyleValue= bar]
-CONSOLE MESSAGE: line 14: align-items: [CSSKeywordValue=normal]
-CONSOLE MESSAGE: line 14: border-radius: [CSSStyleValue=2px]
-This tests the style information in the paint callback.
-
-See the devtools console for test output. The console should log:
-
---bar: [null]
---foo: [CSSStyleValue= bar]
-align-items: [CSSKeywordValue=normal]
-border-radius: [CSSStyleValue=2px]
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/style-background-image.html b/third_party/WebKit/LayoutTests/http/tests/csspaint/style-background-image.html
deleted file mode 100644
index 0fe62fc..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/style-background-image.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<script src="../resources/run-after-layout-and-paint.js"></script>
-<script src="resources/test-runner-paint-worklet.js"></script>
-<script src="resources/generate-paint-style-logging.js"></script>
-<style>
-    div {
-        width: 100px;
-        height: 100px;
-
-        background-image: paint(test);
-        border-radius: 2px;
-        --foo: bar;
-    }
-</style>
-</head>
-<body>
-<div></div>
-<script>
-    if (window.testRunner)
-        testRunner.dumpAsText();
-
-    importPaintWorkletAndTerminateTestAfterAsyncPaint(
-            generatePaintStyleLogging([
-                '--bar',
-                '--foo',
-                'align-items',
-                'border-radius',
-            ]));
-</script>
-<p>This tests the style information in the paint callback.</p>
-<p>See the devtools console for test output. The console should log:</p>
---bar: [null]<br>
---foo: [CSSStyleValue= bar]<br>
-align-items: [CSSKeywordValue=normal]<br>
-border-radius: [CSSStyleValue=2px]
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/style-before-pseudo-expected.txt b/third_party/WebKit/LayoutTests/http/tests/csspaint/style-before-pseudo-expected.txt
deleted file mode 100644
index 15d12f2..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/style-before-pseudo-expected.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-CONSOLE MESSAGE: line 14: --bar: [null]
-CONSOLE MESSAGE: line 14: --foo: [CSSStyleValue= bar]
-CONSOLE MESSAGE: line 14: border-radius: [CSSStyleValue=2px]
-This tests the style information in the paint callback.
-
-See the devtools console for test output. The console should log:
-
---bar: [null]
---foo: [CSSStyleValue= bar]
-border-radius: [CSSStyleValue=2px]
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/style-before-pseudo.html b/third_party/WebKit/LayoutTests/http/tests/csspaint/style-before-pseudo.html
deleted file mode 100644
index 4a4b00b..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/style-before-pseudo.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<script src="../resources/run-after-layout-and-paint.js"></script>
-<script src="resources/test-runner-paint-worklet.js"></script>
-<script src="resources/generate-paint-style-logging.js"></script>
-<style>
-    div {
-        border-radius: 3px;
-    }
-
-    div::before {
-        width: 100px;
-        height: 100px;
-        content: 'foo';
-
-        background-image: paint(test);
-        border-radius: 2px;
-        --foo: bar;
-    }
-</style>
-</head>
-<body>
-<div></div>
-<script>
-    if (window.testRunner)
-        testRunner.dumpAsText();
-
-    importPaintWorkletAndTerminateTestAfterAsyncPaint(
-            generatePaintStyleLogging([
-                '--bar',
-                '--foo',
-                'border-radius',
-            ]));
-</script>
-<p>This tests the style information in the paint callback.</p>
-<p>See the devtools console for test output. The console should log:</p>
---bar: [null]<br>
---foo: [CSSStyleValue= bar]<br>
-border-radius: [CSSStyleValue=2px]
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/style-first-letter-pseudo-expected.txt b/third_party/WebKit/LayoutTests/http/tests/csspaint/style-first-letter-pseudo-expected.txt
deleted file mode 100644
index cd068567..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/style-first-letter-pseudo-expected.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-CONSOLE MESSAGE: line 14: color: [CSSStyleValue=rgb(255, 0, 0)]
-CONSOLE MESSAGE: line 14: line-height: [CSSUnitValue=2px]
-Foo
-This tests the style information in the paint callback.
-
-See the devtools console for test output. The console should log:
-
-color: [CSSStyleValue=rgb(255, 0, 0)]
-line-height: [CSSUnitValue=2px]
-
diff --git a/third_party/WebKit/LayoutTests/http/tests/csspaint/style-first-letter-pseudo.html b/third_party/WebKit/LayoutTests/http/tests/csspaint/style-first-letter-pseudo.html
deleted file mode 100644
index f5b45f94..0000000
--- a/third_party/WebKit/LayoutTests/http/tests/csspaint/style-first-letter-pseudo.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<script src="../resources/run-after-layout-and-paint.js"></script>
-<script src="resources/test-runner-paint-worklet.js"></script>
-<script src="resources/generate-paint-style-logging.js"></script>
-<style>
-    div {
-        color: rgb(0, 255, 0);
-        line-height: 1px;
-    }
-
-    div::first-letter {
-        background-image: paint(test);
-        color: rgb(255, 0, 0);
-        line-height: 2px;
-    }
-</style>
-</head>
-<body>
-<div>Foo</div>
-<script>
-    if (window.testRunner)
-        testRunner.dumpAsText();
-
-    importPaintWorkletAndTerminateTestAfterAsyncPaint(
-            generatePaintStyleLogging([
-                'color',
-                'line-height',
-            ]));
-</script>
-<p>This tests the style information in the paint callback.</p>
-<p>See the devtools console for test output. The console should log:</p>
-color: [CSSStyleValue=rgb(255, 0, 0)]<br>
-line-height: [CSSUnitValue=2px]<br>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-log-linkify-stack-in-errors-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-log-linkify-stack-in-errors-expected.txt
index 5edb94c3..214e0866 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-log-linkify-stack-in-errors-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-log-linkify-stack-in-errors-expected.txt
@@ -6,7 +6,7 @@
     at forStack (console-log-linkify-stack-in-errors.html:11:17)
     at console-log-linkify-stack-in-errors.html:14:1
 CONSOLE MESSAGE: line 30: TypeError: Cannot read property 'removeChild' of null
-    at domError (console-log-linkify-stack-in-errors.html:28:22)
+    at domError (console-log-linkify-stack-in-errors.html:28:23)
     at console-log-linkify-stack-in-errors.html:34:1
 CONSOLE MESSAGE: line 41: Error: some error
 CONSOLE MESSAGE: line 47: Error message without stacks http://www.chromium.org/
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 14c7efa..d74c112 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/overflow/tiled-mask-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/tiled-mask-expected.png
index ba320740..f0d3620c4 100644
--- 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
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/text-on-scaled-surface-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/text-on-scaled-surface-expected.png
new file mode 100644
index 0000000..c6129603
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/text-on-scaled-surface-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 c2adc3cd..b9c4cb24 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 5021baf6..8f8a62a 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/virtual/disable-spinvalidation/compositing/color-matching/image-color-matching-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/color-matching/image-color-matching-expected.png
deleted file mode 100644
index 7ff9f914..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/color-matching/image-color-matching-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.png
deleted file mode 100644
index 0c46d4069a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.txt
deleted file mode 100644
index 3eeb73ab4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 756
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 785x756 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
-  LayoutBlockFlow {HTML} at (0,0) size 785x755.88
-    LayoutBlockFlow {BODY} at (8,21.44) size 769x118.44
-      LayoutBlockFlow {H1} at (0,0) size 769x37
-        LayoutText {#text} at (0,0) size 389x36
-          text run at (0,0) width 389: "Image optimisation in layers"
-      LayoutBlockFlow {P} at (0,58.44) size 769x60
-        LayoutText {#text} at (0,0) size 747x59
-          text run at (0,0) width 595: "This test exercises direct compositing of images with hardware acceleration. The visual results "
-          text run at (595,0) width 34: "using"
-          text run at (0,20) width 681: "ACCELERATED_COMPOSITING and regular TOT should be identical. Running this test manually with "
-          text run at (680,20) width 67: "the correct"
-          text run at (0,40) width 442: "debug options will show which elements are directly composited. See "
-        LayoutInline {A} at (0,0) size 305x19 [color=#0000EE]
-          LayoutText {#text} at (442,40) size 305x19
-            text run at (442,40) width 305: "https://bugs.webkit.org/show_bug.cgi?id=23361"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow (floating) {DIV} at (0,134.44) size 260x200
-        LayoutText {#text} at (150,0) size 106x79
-          text run at (150,0) width 106: "Basic image - no"
-          text run at (150,20) width 83: "style - can be"
-          text run at (150,40) width 47: "directly"
-          text run at (150,60) width 72: "composited"
-      LayoutBlockFlow (floating) {DIV} at (260,134.44) size 260x200
-        LayoutText {#text} at (160,0) size 100x79
-          text run at (160,0) width 100: "5px blue border"
-          text run at (160,20) width 88: "- can NOT be"
-          text run at (160,40) width 47: "directly"
-          text run at (160,60) width 72: "composited"
-      LayoutBlockFlow (floating) {DIV} at (0,334.44) size 260x200
-        LayoutText {#text} at (160,0) size 79x79
-          text run at (160,0) width 79: "margin - can"
-          text run at (160,20) width 53: "NOT be"
-          text run at (160,40) width 47: "directly"
-          text run at (160,60) width 72: "composited"
-      LayoutBlockFlow (floating) {DIV} at (260,334.44) size 260x200
-        LayoutText {#text} at (150,0) size 109x59
-          text run at (150,0) width 109: "solid background"
-          text run at (150,20) width 101: "- can be directly"
-          text run at (150,40) width 72: "composited"
-      LayoutBlockFlow (floating) {DIV} at (0,534.44) size 260x200
-        LayoutText {#text} at (150,0) size 104x79
-          text run at (150,0) width 75: "background"
-          text run at (150,20) width 73: "image - can"
-          text run at (150,40) width 104: "NOT be directly"
-          text run at (150,60) width 72: "composited"
-      LayoutBlockFlow (floating) {DIV} at (260,534.44) size 260x200
-        LayoutText {#text} at (150,0) size 83x99
-          text run at (150,0) width 67: "rotated but"
-          text run at (150,20) width 81: "otherwise no"
-          text run at (150,40) width 83: "style - can be"
-          text run at (150,60) width 47: "directly"
-          text run at (150,80) width 72: "composited"
-layer at (8,156) size 150x150
-  LayoutImage (floating) {IMG} at (0,0) size 150x150
-layer at (268,156) size 160x160
-  LayoutImage (floating) {IMG} at (0,0) size 160x160 [border: (5px solid #0000FF)]
-layer at (13,361) size 150x150
-  LayoutImage (floating) {IMG} at (5,5) size 150x150
-layer at (268,356) size 150x150
-  LayoutImage (floating) {IMG} at (0,0) size 150x150 [bgcolor=#808080]
-layer at (8,556) size 150x150 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
-  LayoutImage (floating) {IMG} at (0,0) size 150x150 [bgcolor=#FFA500]
-layer at (268,556) size 150x150 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
-  LayoutImage (floating) {IMG} at (0,0) size 150x150
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/generated-content-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/generated-content-expected.png
deleted file mode 100644
index 80abc66..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/generated-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/clipping-foreground-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/clipping-foreground-expected.txt
deleted file mode 100644
index 8ea54ac1..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/clipping-foreground-expected.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 436x19
-          text run at (0,0) width 436: "The layering of the boxes should not be affected by overflow:hidden."
-      LayoutBlockFlow (anonymous) at (0,36) size 784x477
-        LayoutText {#text} at (320,305) size 4x19
-          text run at (320,305) width 4: " "
-        LayoutText {#text} at (0,0) size 0x0
-layer at (68,261) size 200x200 layerType: background only
-layer at (28,221) size 150x150
-  LayoutBlockFlow (positioned) zI: -1 {DIV} at (-40,-40) size 150x150 [color=#808080] [bgcolor=#C86464] [border: (2px solid #000000)]
-    LayoutText zI: -1 {#text} at (22,22) size 106x40
-      text run at (22,22) width 106: "Behind"
-layer at (50,303) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (22,82) size 100x100 [bgcolor=#008000] [border: (2px solid #000000)]
-    LayoutText {#text} at (22,22) size 55x41
-      text run at (22,22) width 55: "Behind"
-      text run at (22,43) width 53: "behind"
-layer at (68,261) size 200x200 layerType: foreground only
-  LayoutBlockFlow (relative positioned) {DIV} at (60,217) size 200x200 [color=#0000FF] [bgcolor=#FFFFFFCC] [border: (10px solid #000000)]
-    LayoutText {#text} at (30,30) size 126x81
-      text run at (30,30) width 59: "Box"
-      text run at (30,71) width 126: "contents"
-layer at (158,351) size 150x150
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (90,90) size 150x150 [color=#808080] [bgcolor=#C8C880] [border: (2px solid #000000)]
-    LayoutText zI: 1 {#text} at (22,22) size 86x81
-      text run at (22,22) width 33: "In"
-      text run at (22,63) width 86: "Front"
-layer at (392,104) size 200x200 clip at (402,114) size 180x180 scrollWidth 230 scrollHeight 230 layerType: background only
-layer at (352,64) size 150x150 backgroundClip at (402,114) size 180x180 clip at (402,114) size 180x180
-  LayoutBlockFlow (positioned) zI: -1 {DIV} at (-40,-40) size 150x150 [color=#808080] [bgcolor=#C86464] [border: (2px solid #000000)]
-    LayoutText zI: -1 {#text} at (22,22) size 106x40
-      text run at (22,22) width 106: "Behind"
-layer at (374,146) size 100x100 backgroundClip at (402,114) size 180x180 clip at (402,114) size 180x180
-  LayoutBlockFlow (positioned) {DIV} at (22,82) size 100x100 [bgcolor=#008000] [border: (2px solid #000000)]
-    LayoutText {#text} at (22,22) size 55x41
-      text run at (22,22) width 55: "Behind"
-      text run at (22,43) width 53: "behind"
-layer at (392,104) size 200x200 clip at (402,114) size 180x180 scrollWidth 230 scrollHeight 230 layerType: foreground only
-  LayoutBlockFlow (relative positioned) {DIV} at (384,60) size 200x200 [color=#0000FF] [bgcolor=#FFFFFFCC] [border: (10px solid #000000)]
-    LayoutText {#text} at (30,30) size 126x81
-      text run at (30,30) width 59: "Box"
-      text run at (30,71) width 126: "contents"
-layer at (482,194) size 150x150 backgroundClip at (402,114) size 180x180 clip at (402,114) size 180x180
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (90,90) size 150x150 [color=#808080] [bgcolor=#C8C880] [border: (2px solid #000000)]
-    LayoutText zI: 1 {#text} at (22,22) size 86x81
-      text run at (22,22) width 33: "In"
-      text run at (22,63) width 86: "Front"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/fixed-position-transform-composited-page-scale-down-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/fixed-position-transform-composited-page-scale-down-expected.png
deleted file mode 100644
index 80d70b5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/fixed-position-transform-composited-page-scale-down-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/fixed-position-transform-composited-page-scale-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/fixed-position-transform-composited-page-scale-expected.png
deleted file mode 100644
index 34321ee..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/fixed-position-transform-composited-page-scale-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/layer-due-to-layer-children-deep-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/layer-due-to-layer-children-deep-expected.png
deleted file mode 100644
index 175396f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/layer-due-to-layer-children-deep-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/root-layer-update-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/root-layer-update-expected.png
deleted file mode 100644
index ccc60ec1..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/root-layer-update-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/video-fixed-scrolling-expected.png
deleted file mode 100644
index 99e2a33c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/video-fixed-scrolling-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/video-opacity-overlay-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/video-opacity-overlay-expected.png
deleted file mode 100644
index 258709e4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/geometry/video-opacity-overlay-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
deleted file mode 100644
index 7a4c0e10..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow-expected.png
deleted file mode 100644
index 608720c6..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-alignment-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-alignment-expected.txt
deleted file mode 100644
index d40855dc..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-alignment-expected.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x76
-  LayoutBlockFlow {HTML} at (0,0) size 800x76
-    LayoutBlockFlow {BODY} at (8,8) size 784x60
-      LayoutText {#text} at (0,0) size 770x39
-        text run at (0,0) width 594: "Simple test of composited iframe content. There should be a blue box with a gray background "
-        text run at (594,0) width 176: "inside the black border. The"
-        text run at (0,20) width 384: "gray background should fit perfectly within the block border "
-        text run at (384,20) width 89: "with no gaps. "
-      LayoutBR {BR} at (0,0) size 0x0
-      LayoutBR {BR} at (0,40) size 0x19
-layer at (100,100) size 440x340
-  LayoutIFrame (positioned) {IFRAME} at (100,100) size 440x340 [border: (20px solid #000000)]
-    layer at (0,0) size 400x300
-      LayoutView at (0,0) size 400x300
-    layer at (0,0) size 400x230
-      LayoutBlockFlow {HTML} at (0,0) size 400x230
-        LayoutBlockFlow {BODY} at (8,10) size 384x210 [bgcolor=#C0C0C0]
-    layer at (18,10) size 210x210
-      LayoutBlockFlow {DIV} at (10,0) size 210x210 [bgcolor=#0000FF]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/layers-inside-overflow-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/layers-inside-overflow-scroll-expected.png
deleted file mode 100644
index 1238627..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/layers-inside-overflow-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/lots-of-img-layers-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/lots-of-img-layers-expected.png
deleted file mode 100644
index 1d5e388..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/lots-of-img-layers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/lots-of-img-layers-with-opacity-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/lots-of-img-layers-with-opacity-expected.png
deleted file mode 100644
index 504660f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/lots-of-img-layers-with-opacity-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/masks/mask-with-removed-filters-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/masks/mask-with-removed-filters-expected.png
new file mode 100644
index 0000000..d74c112
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/masks/mask-with-removed-filters-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/clip-parent-reset-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/clip-parent-reset-expected.txt
deleted file mode 100644
index a92c8bdc..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/clip-parent-reset-expected.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x186
-  LayoutBlockFlow {HTML} at (0,0) size 800x186
-    LayoutBlockFlow {BODY} at (8,8) size 784x170
-      LayoutBlockFlow (anonymous) at (0,150) size 784x20
-        LayoutText {#text} at (0,0) size 624x19
-          text run at (0,0) width 624: "This test verifies the clip parent of a layer gets correctly reset when it gained a non-composited clip."
-layer at (8,8) size 150x150 transparent
-  LayoutBlockFlow {DIV} at (0,0) size 150x150 [bgcolor=#FF0000]
-layer at (8,8) size 100x100 scrollWidth 200 scrollHeight 200
-  LayoutBlockFlow {DIV} at (0,0) size 100x100
-layer at (8,8) size 200x200 backgroundClip at (8,8) size 100x100 clip at (8,8) size 100x100
-  LayoutBlockFlow {DIV} at (0,0) size 200x200 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/mask-with-filter-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/mask-with-filter-expected.png
deleted file mode 100644
index fff540df..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/mask-with-filter-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/overflow-compositing-descendant-expected.png
deleted file mode 100644
index 1e09c67..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/overflow-compositing-descendant-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/scroll-ancestor-update-expected.png
deleted file mode 100644
index 8916901..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/scroll-ancestor-update-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/tiled-mask-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/tiled-mask-expected.png
new file mode 100644
index 0000000..f0d3620c4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/overflow/tiled-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/perpendicular-layer-sorting-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/perpendicular-layer-sorting-expected.png
deleted file mode 100644
index f6472ac..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/perpendicular-layer-sorting-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/reflections/load-video-in-reflection-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/reflections/load-video-in-reflection-expected.png
deleted file mode 100644
index 62dcc8f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/reflections/load-video-in-reflection-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
deleted file mode 100644
index 9505974..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
deleted file mode 100644
index a888506..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-transition-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-transition-expected.png
deleted file mode 100644
index 01df510..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-transition-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/self-painting-layers-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/self-painting-layers-expected.png
deleted file mode 100644
index 2d921e07..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/self-painting-layers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png
deleted file mode 100644
index 4a5c54ff..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/sibling-positioning-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/sibling-positioning-expected.png
deleted file mode 100644
index 845fbe1..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/sibling-positioning-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/squashing/selection-repaint-with-gaps-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/squashing/selection-repaint-with-gaps-expected.txt
deleted file mode 100644
index c31a896..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/squashing/selection-repaint-with-gaps-expected.txt
+++ /dev/null
@@ -1,135 +0,0 @@
-lorem ipsumlorem ipsumlorem ipsum
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='overlap'",
-      "position": [8, 8],
-      "bounds": [300, 500]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='item')",
-      "position": [15, 35],
-      "bounds": [100, 210],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 80, 40, 39],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='inline-block'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ipsum'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='overlap'",
-      "position": [8, 8],
-      "bounds": [300, 500]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='item')",
-      "position": [15, 35],
-      "bounds": [100, 210],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 80, 42, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 160, 40, 39],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='inline-block'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ipsum'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='item2' class='item'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='inline-block'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ipsum'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/text-on-scaled-surface-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/text-on-scaled-surface-expected.png
new file mode 100644
index 0000000..c6129603
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/text-on-scaled-surface-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/video-frame-size-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/video-frame-size-change-expected.txt
deleted file mode 100644
index a0940e4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/video-frame-size-change-expected.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x245
-  LayoutBlockFlow {HTML} at (0,0) size 800x245
-    LayoutBlockFlow {BODY} at (8,16) size 784x221
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 483x19
-          text run at (0,0) width 483: "Tests decoding and rendering a video element that has a changing resolution."
-      LayoutBlockFlow (anonymous) at (0,36) size 784x185
-        LayoutText {#text} at (320,165) size 4x19
-          text run at (320,165) width 4: " "
-        LayoutText {#text} at (0,0) size 0x0
-layer at (8,52) size 320x180
-  LayoutVideo {VIDEO} at (0,0) size 320x180
-layer at (332,52) size 320x180
-  LayoutVideo {VIDEO} at (324,0) size 320x180
-layer at (8,52) size 320x180
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x180
-    LayoutBlockFlow {DIV} at (0,148) size 320x32
-layer at (8,52) size 320x138
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x138
-layer at (332,52) size 320x180
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x180
-    LayoutBlockFlow {DIV} at (0,148) size 320x32
-layer at (332,52) size 320x138
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x138
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/visibility/visibility-simple-video-layer-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/visibility/visibility-simple-video-layer-expected.png
deleted file mode 100644
index 3d2a91a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/compositing/visibility/visibility-simple-video-layer-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/4774354-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/4774354-expected.png
deleted file mode 100644
index 3b75bf6..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/4774354-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/4774354-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/4774354-expected.txt
deleted file mode 100644
index c48c5f6..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/4774354-expected.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutText {#text} at (0,0) size 0x0
-layer at (8,8) size 304x154
-  LayoutIFrame {IFRAME} at (0,0) size 304x154 [border: (2px inset #EEEEEE)]
-    layer at (0,0) size 300x150
-      LayoutView at (0,0) size 300x150
-    layer at (0,0) size 300x150
-      LayoutBlockFlow {HTML} at (0,0) size 300x150
-        LayoutBlockFlow {BODY} at (8,8) size 284x134 [bgcolor=#FFFFE0]
-          LayoutText {#text} at (0,0) size 239x19
-            text run at (0,0) width 239: "You should not see a caret in this text."
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.png
deleted file mode 100644
index 71c2c1e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/backgroundSizeRepaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/backgroundSizeRepaint-expected.txt
deleted file mode 100644
index 5fcf6d8a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/backgroundSizeRepaint-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 339, 200, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 177, 200, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='b'",
-          "rect": [29, 379, 180, 20],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='a'",
-          "rect": [29, 217, 180, 20],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='a'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='b'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt
deleted file mode 100644
index 28dc52a2..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (floating) SPAN",
-          "rect": [309, 37, 292, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) SPAN",
-          "rect": [155, 37, 292, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [309, 37, 292, 19],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [155, 37, 292, 19],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) SPAN",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) SPAN",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/block-no-inflow-children-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/block-no-inflow-children-expected.txt
deleted file mode 100644
index bfdb1b1..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/block-no-inflow-children-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 0, 63, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [0, 0, 62, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'La la la la'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/box-inline-resize-expected.txt
deleted file mode 100644
index 65314c26..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/box-inline-resize-expected.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow H2",
-          "rect": [40, 107, 113, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow H2",
-          "rect": [8, 107, 113, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [40, 107, 113, 27],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 107, 113, 27],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 88, 32, 67],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG id='foo'",
-          "rect": [8, 88, 32, 32],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG id='foo'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow H2",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Chromium'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/bugzilla-5699-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/bugzilla-5699-expected.txt
deleted file mode 100644
index 663e27d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/bugzilla-5699-expected.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 136, 784, 68],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 184, 35, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 156, 35, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='d'",
-          "rect": [8, 150, 4, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 150, 4, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 136, 4, 19],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='d'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Hello'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6278-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6278-expected.txt
deleted file mode 100644
index de9c7873..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6278-expected.txt
+++ /dev/null
@@ -1,124 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [10, 138, 292, 160],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 138, 292, 159],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [10, 303, 292, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [10, 138, 242, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [10, 343, 242, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='col1'",
-          "rect": [10, 353, 242, 40],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [9, 138, 236, 199],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='target'",
-          "rect": [254, 138, 52, 255],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='col1'",
-          "rect": [252, 138, 50, 215],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD id='col1'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Curabitur pretium, quam quis semper'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'malesuada, est libero feugiat libero,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'vel fringilla orci nibh sed neque.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Quisque eu nulla non nisi molestie'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'accumsan. Etiam tellus urna, laoreet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ac, laoreet non, suscipit sed, sapien.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Phasellus vehicula, sem at posuere'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'vehicula, augue nibh molestie nisl,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'nec ullamcorper lacus ante vulputate'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'pede.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD id='target'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6473-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6473-expected.txt
deleted file mode 100644
index a087233..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6473-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='allcontent'",
-          "rect": [8, 136, 784, 52],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) P",
-          "rect": [8, 152, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) P",
-          "rect": [8, 136, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 152, 71, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 136, 71, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='allcontent'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'SUCCESS'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.png
deleted file mode 100644
index 12ce701f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png
deleted file mode 100644
index 4e7f30a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
deleted file mode 100644
index 97e19398..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ /dev/null
@@ -1,433 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 933],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='copyvideo'",
-          "rect": [571, 515, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'",
-          "rect": [571, 415, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-invideo'",
-          "rect": [571, 315, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-outvideo'",
-          "rect": [571, 165, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-invideo'",
-          "rect": [571, 115, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='copycanvas'",
-          "rect": [429, 515, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'",
-          "rect": [429, 415, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-incanvas'",
-          "rect": [429, 315, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-outcanvas'",
-          "rect": [429, 165, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-incanvas'",
-          "rect": [429, 115, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='copyimage'",
-          "rect": [287, 515, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-atopimage'",
-          "rect": [287, 415, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-inimage'",
-          "rect": [287, 315, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-outimage'",
-          "rect": [287, 165, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-inimage'",
-          "rect": [287, 115, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='copysolid color'",
-          "rect": [145, 515, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-atopsolid color'",
-          "rect": [145, 415, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-insolid color'",
-          "rect": [145, 315, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-outsolid color'",
-          "rect": [145, 165, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-insolid color'",
-          "rect": [145, 115, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='xorvideo'",
-          "rect": [601, 565, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='lightervideo'",
-          "rect": [601, 465, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-outvideo'",
-          "rect": [601, 365, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-overvideo'",
-          "rect": [601, 265, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-atopvideo'",
-          "rect": [601, 215, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-overvideo'",
-          "rect": [601, 65, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='xorcanvas'",
-          "rect": [459, 565, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='lightercanvas'",
-          "rect": [459, 465, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'",
-          "rect": [459, 365, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-overcanvas'",
-          "rect": [459, 265, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'",
-          "rect": [459, 215, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-overcanvas'",
-          "rect": [459, 65, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='xorimage'",
-          "rect": [317, 565, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='lighterimage'",
-          "rect": [317, 465, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-outimage'",
-          "rect": [317, 365, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-overimage'",
-          "rect": [317, 265, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-atopimage'",
-          "rect": [317, 215, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-overimage'",
-          "rect": [317, 65, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='xorsolid color'",
-          "rect": [175, 565, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='lightersolid color'",
-          "rect": [175, 465, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-outsolid color'",
-          "rect": [175, 365, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'",
-          "rect": [175, 265, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-atopsolid color'",
-          "rect": [175, 215, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-oversolid color'",
-          "rect": [175, 65, 50, 40],
-          "reason": "invalidate paint rectangle"
-        }
-      ]
-    },
-    {
-      "name": "LayoutVideo VIDEO id='video'",
-      "position": [15, 859],
-      "bounds": [150, 60]
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutFlexibleBox (relative positioned) DIV",
-      "position": [15, 859],
-      "bounds": [150, 60],
-      "drawsContent": true
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)",
-      "position": [15, 859],
-      "bounds": [150, 18],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-oversolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-overimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-overcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-overvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-insolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-inimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-incanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-invideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-outsolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-outimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-outcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-outvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-atopsolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-atopimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-atopvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-overimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-overcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-overvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-insolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-inimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-incanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-invideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-outsolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-outimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-outvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-atopsolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-atopimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='lightersolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='lighterimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='lightercanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='lightervideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='copysolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='copyimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='copycanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='copyvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='xorsolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='xorimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='xorcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='xorvideo'",
-      "reason": "invalidate paint rectangle"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-expected.png
deleted file mode 100644
index 5d8c82a0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-no-full-invalidation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-no-full-invalidation-expected.png
deleted file mode 100644
index 2ccd5ce3..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-no-full-invalidation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.png
deleted file mode 100644
index 75e7aa9..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.txt
deleted file mode 100644
index 0f0a14e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 48, 22, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 48, 15, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [30, 48, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [23, 48, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [23, 48, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [15, 48, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [15, 48, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 48, 8, 19],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [8, 48, 8, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='editor'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'a'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'ab'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'abc'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
deleted file mode 100644
index 14111df..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt
deleted file mode 100644
index 49ed2f7a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [399, 11, 1, 16],
-          "reason": "caret"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [396, 11, 1, 16],
-          "reason": "caret"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-outside-block-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-outside-block-expected.png
deleted file mode 100644
index 19430d17..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-outside-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-outside-block-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-outside-block-expected.txt
deleted file mode 100644
index b8644c03..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-outside-block-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [791, 8, 1, 19],
-          "reason": "caret"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.png
deleted file mode 100644
index 2d6792e4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.txt
deleted file mode 100644
index d341afd0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='scroller'",
-      "position": [8, 48],
-      "bounds": [100, 100],
-      "shouldFlattenTransform": false,
-      "drawsContent": true
-    },
-    {
-      "name": "Scrolling Layer",
-      "bounds": [100, 100],
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [205, 1022],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='text'",
-          "rect": [-1, 999, 207, 24],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [3, 1003, 200, 16],
-          "reason": "subtree"
-        }
-      ]
-    },
-    {
-      "name": "Overflow Controls Host Layer",
-      "bounds": [100, 100]
-    },
-    {
-      "name": "Horizontal Scrollbar Layer",
-      "position": [0, 100],
-      "bounds": [100, 0],
-      "drawsContent": true
-    },
-    {
-      "name": "Vertical Scrollbar Layer",
-      "position": [100, 0],
-      "bounds": [0, 100],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='text'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.png
deleted file mode 100644
index 134b5df..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.txt
deleted file mode 100644
index 5c43925..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='div'",
-          "rect": [337, 206, 11, 18],
-          "reason": "caret"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='div'",
-          "rect": [42, 36, 11, 18],
-          "reason": "caret"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt
deleted file mode 100644
index 9f52812..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl (positioned) INPUT id='input'",
-          "rect": [8, 8, 244, 68],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [30, 30, 200, 24],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [30, 30, 46, 23],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl (positioned) INPUT id='input'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'NEW'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/column-rules-fixed-height-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/column-rules-fixed-height-expected.png
deleted file mode 100644
index 06cb326..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/column-rules-fixed-height-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.png
deleted file mode 100644
index f7f2a312..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.txt
deleted file mode 100644
index 15a6444..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableRow TR",
-      "position": [8, 8],
-      "transformOrigin": [36.5, 11.5],
-      "bounds": [74, 24],
-      "drawsContent": true,
-      "backgroundColor": "#FF0000",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell TD id='target'",
-          "rect": [0, 0, 37, 23],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
deleted file mode 100644
index 6fd423e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt
deleted file mode 100644
index 586fc21..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-Hi!
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 4021],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-          "rect": [425, 980, 360, 90],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-          "rect": [425, 980, 360, 90],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-          "rect": [425, 480, 360, 90],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-          "rect": [425, 480, 360, 90],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [425, 980, 21, 19],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [425, 980, 21, 19],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [425, 480, 21, 19],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [425, 480, 21, 19],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Hi!'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Hi!'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/compositing/text-match-highlight-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/compositing/text-match-highlight-expected.png
deleted file mode 100644
index 67ed278..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/compositing/text-match-highlight-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/continuation-after-outline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/continuation-after-outline-expected.png
deleted file mode 100644
index ad9cac9..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/continuation-after-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt
deleted file mode 100644
index 75fa8acb..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [9, 87, 198, 16],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 117, 184, 16],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [76, 117, 64, 16],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText (anonymous)",
-          "rect": [9, 87, 63, 16],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText (anonymous)",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'SUCCESS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'SUCCESS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/create-layer-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/create-layer-repaint-expected.txt
deleted file mode 100644
index 4c352c66..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/create-layer-repaint-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
-          "rect": [28, 56, 500, 50],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
-          "rect": [28, 56, 250, 50],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.png
deleted file mode 100644
index be1467f2..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.txt
deleted file mode 100644
index 67443b7..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.txt
+++ /dev/null
@@ -1,115 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='two'",
-          "rect": [8, 147, 784, 41],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 167, 784, 21],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 147, 784, 21],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='one'",
-          "rect": [8, 127, 784, 21],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 167, 31, 20],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 127, 31, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 147, 28, 20],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 127, 27, 20],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='two'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='one'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'three'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/destroy-composited-scrollbar-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/destroy-composited-scrollbar-expected.png
deleted file mode 100644
index 3e3ac70..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/destroy-composited-scrollbar-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/destroy-overlay-scrollbar-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/destroy-overlay-scrollbar-expected.png
deleted file mode 100644
index 003e32c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/destroy-overlay-scrollbar-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/destroy-scrollbar-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/destroy-scrollbar-expected.png
deleted file mode 100644
index 02596304..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/destroy-scrollbar-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/details-open-repaint-expected.txt
deleted file mode 100644
index 39b99f249..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/details-open-repaint-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='details-content'",
-          "rect": [8, 72, 784, 22],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTextControl INPUT",
-          "rect": [8, 72, 154, 22],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [10, 75, 150, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutDetailsMarker DIV id='details-marker'",
-          "rect": [8, 56, 11, 11],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutDetailsMarker DIV id='details-marker'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='details-content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTextControl INPUT",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-child-move-after-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-child-move-after-scroll-expected.png
deleted file mode 100644
index 62defa6d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-child-move-after-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-fixed-move-after-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-fixed-move-after-scroll-expected.png
deleted file mode 100644
index 62defa6d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-fixed-move-after-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-transformed-move-after-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-transformed-move-after-scroll-expected.png
deleted file mode 100644
index d20655df..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-transformed-move-after-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-transformed-scrolled-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-transformed-scrolled-expected.png
deleted file mode 100644
index 8170dff..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-child-of-transformed-scrolled-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-descendant-of-transformed-scrolled-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-descendant-of-transformed-scrolled-expected.png
deleted file mode 100644
index 445bdad..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-descendant-of-transformed-scrolled-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.png
deleted file mode 100644
index 4164322..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-move-after-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-move-after-scroll-expected.png
deleted file mode 100644
index 62defa6d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/fixed-move-after-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-expected.txt
deleted file mode 100644
index 50303dc..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-expected.txt
+++ /dev/null
@@ -1,160 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='content'",
-          "rect": [138, 128, 654, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [138, 128, 654, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='content'",
-          "rect": [148, 128, 644, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [148, 128, 644, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [137, 128, 637, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [147, 128, 636, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [147, 128, 636, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='content'",
-          "rect": [400, 128, 392, 180],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [400, 128, 392, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='left'",
-          "rect": [8, 228, 392, 80],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [400, 128, 391, 179],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='left'",
-          "rect": [148, 128, 252, 180],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='left'",
-          "rect": [138, 128, 10, 100],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='left'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='content'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='left'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='content'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.png
deleted file mode 100644
index 833b4ec8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.txt
deleted file mode 100644
index 1b3a288..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x552
-      LayoutBlockFlow {P} at (0,0) size 784x40
-        LayoutText {#text} at (0,0) size 226x19
-          text run at (0,0) width 226: "This is a test for regressions against "
-        LayoutInline {I} at (0,0) size 761x39
-          LayoutInline {A} at (0,0) size 348x19 [color=#0000EE]
-            LayoutText {#text} at (226,0) size 348x19
-              text run at (226,0) width 348: "http://bugzilla.opendarwin.org/show_bug.cgi?id=8056"
-          LayoutText {#text} at (573,0) size 761x39
-            text run at (573,0) width 5: " "
-            text run at (577,0) width 184: "Flexible boxes do not repaint"
-            text run at (0,20) width 238: "their top, left and children's overflows"
-        LayoutText {#text} at (237,20) size 5x19
-          text run at (237,20) width 5: "."
-      LayoutBlockFlow {DIV} at (0,66) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-            LayoutText {#text} at (1,1) size 177x19
-              text run at (1,1) width 177: "Lorem ipsum dolor sit amet."
-      LayoutBlockFlow {DIV} at (0,186) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-      LayoutBlockFlow {DIV} at (0,306) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-      LayoutBlockFlow {DIV} at (0,426) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-            LayoutText {#text} at (1,1) size 98x159
-              text run at (1,1) width 84: "Lorem ipsum"
-              text run at (1,21) width 89: "dolor sit amet,"
-              text run at (1,41) width 78: "consectetuer"
-              text run at (1,61) width 91: "adipiscing elit."
-              text run at (1,81) width 98: "Etiam et ipsum."
-              text run at (1,101) width 31: "Nam"
-              text run at (1,121) width 98: "consectetuer mi"
-              text run at (1,141) width 61: "eget velit."
-layer at (8,64) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,56) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.png
deleted file mode 100644
index 833b4ec8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.txt
deleted file mode 100644
index 1b3a288..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x552
-      LayoutBlockFlow {P} at (0,0) size 784x40
-        LayoutText {#text} at (0,0) size 226x19
-          text run at (0,0) width 226: "This is a test for regressions against "
-        LayoutInline {I} at (0,0) size 761x39
-          LayoutInline {A} at (0,0) size 348x19 [color=#0000EE]
-            LayoutText {#text} at (226,0) size 348x19
-              text run at (226,0) width 348: "http://bugzilla.opendarwin.org/show_bug.cgi?id=8056"
-          LayoutText {#text} at (573,0) size 761x39
-            text run at (573,0) width 5: " "
-            text run at (577,0) width 184: "Flexible boxes do not repaint"
-            text run at (0,20) width 238: "their top, left and children's overflows"
-        LayoutText {#text} at (237,20) size 5x19
-          text run at (237,20) width 5: "."
-      LayoutBlockFlow {DIV} at (0,66) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-            LayoutText {#text} at (1,1) size 177x19
-              text run at (1,1) width 177: "Lorem ipsum dolor sit amet."
-      LayoutBlockFlow {DIV} at (0,186) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-      LayoutBlockFlow {DIV} at (0,306) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-      LayoutBlockFlow {DIV} at (0,426) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-            LayoutText {#text} at (1,1) size 98x159
-              text run at (1,1) width 84: "Lorem ipsum"
-              text run at (1,21) width 89: "dolor sit amet,"
-              text run at (1,41) width 78: "consectetuer"
-              text run at (1,61) width 91: "adipiscing elit."
-              text run at (1,81) width 98: "Etiam et ipsum."
-              text run at (1,101) width 31: "Nam"
-              text run at (1,121) width 98: "consectetuer mi"
-              text run at (1,141) width 61: "eget velit."
-layer at (8,64) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,56) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/float-overflow-expected.txt
deleted file mode 100644
index 9380c0e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/float-overflow-expected.txt
+++ /dev/null
@@ -1,1273 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [11, 366, 778, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [11, 360, 778, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 537, 62, 37],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 531, 62, 37],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 498, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 492, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 459, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 453, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 420, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 414, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [61, 249, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [61, 243, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [61, 210, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [61, 204, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 171, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 165, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 132, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 126, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 93, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 87, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 54, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 48, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 15, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 9, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 366, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 360, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 327, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 321, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 288, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 282, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 504, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 498, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 465, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 459, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 426, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 420, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 216, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 210, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 177, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 171, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 138, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 132, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 99, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 93, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 60, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 54, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 21, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 15, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 374, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 368, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 335, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 329, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 296, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 290, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 375, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 369, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 336, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 330, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 297, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 291, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [67, 138, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [67, 132, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [65, 60, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [65, 54, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [65, 21, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [65, 15, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 543, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 537, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 504, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 498, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 465, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 459, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 426, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 420, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 255, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 249, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 216, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 210, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 177, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 171, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 99, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 93, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 543, 32, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 537, 32, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 255, 32, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 249, 32, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [66, 297, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [66, 291, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [63, 21, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [63, 15, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 543, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 537, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 504, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 498, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 465, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 459, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 426, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 420, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 255, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 249, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 216, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 210, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 177, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 171, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 138, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 132, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [58, 375, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [58, 369, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [58, 336, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [58, 330, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [57, 99, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [57, 93, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [57, 60, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [57, 54, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [66, 299, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [66, 293, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [63, 23, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [63, 17, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 545, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 539, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 506, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 500, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 467, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 461, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 428, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 422, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 257, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 251, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 218, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 212, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 179, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 173, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 140, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 134, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [58, 377, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [58, 371, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [58, 338, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [58, 332, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [57, 101, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [57, 95, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [57, 62, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [57, 56, 16, 17],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/float-overflow-right-expected.txt
deleted file mode 100644
index a72a4fa..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/float-overflow-right-expected.txt
+++ /dev/null
@@ -1,1273 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [11, 366, 778, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [11, 360, 778, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 537, 62, 37],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 531, 62, 37],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 498, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 492, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 459, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 453, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 420, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 414, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [677, 249, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [677, 243, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [677, 210, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [677, 204, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 171, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 165, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 132, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 126, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 93, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 87, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 54, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 48, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 15, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 9, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 366, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 360, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 327, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 321, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 288, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 282, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 504, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 498, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 465, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 459, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 426, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 420, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 216, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 210, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 177, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 171, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 138, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 132, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 99, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 93, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 60, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 54, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 21, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 15, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 374, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 368, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 335, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 329, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 296, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 290, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 543, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 537, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 504, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 498, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 465, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 459, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 426, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 420, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 255, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 249, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 216, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 210, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 177, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 171, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 99, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 93, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [695, 60, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [695, 54, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [695, 21, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [695, 15, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [693, 138, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [693, 132, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 375, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 369, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 336, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 330, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 297, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 291, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [701, 543, 32, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [701, 537, 32, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [701, 255, 32, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [701, 249, 32, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [727, 99, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [727, 93, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [727, 60, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [727, 54, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [726, 375, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [726, 369, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [726, 336, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [726, 330, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 543, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 537, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 504, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 498, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 465, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 459, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 426, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 420, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 255, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 249, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 216, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 210, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 177, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 171, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 138, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 132, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [721, 21, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [721, 15, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [718, 297, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [718, 291, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [727, 101, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [727, 95, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [727, 62, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [727, 56, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [726, 377, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [726, 371, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [726, 338, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [726, 332, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 545, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 539, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 506, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 500, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 467, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 461, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 428, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 422, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 257, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 251, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 218, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 212, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 179, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 173, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 140, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 134, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [721, 23, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [721, 17, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [718, 299, 16, 17],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [718, 293, 16, 17],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-continuations-expected.txt
deleted file mode 100644
index 8f57277..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-continuations-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "rect": [7, 87, 88, 22],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.png
deleted file mode 100644
index 1c09c6e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.txt
deleted file mode 100644
index 8f57277..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "rect": [7, 87, 88, 22],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.png
deleted file mode 100644
index 3da4c54..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.txt
deleted file mode 100644
index 0d655cb..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {DIV} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 35x19
-          text run at (0,0) width 35: "Both "
-        LayoutText {#text} at (0,0) size 0x0
-layer at (8,8) size 348x23
-  LayoutInline (relative positioned) {A} at (0,0) size 348x23 [color=#0000EE] [border: (2px solid #FF0000)]
-    LayoutText {#text} at (37,0) size 53x19
-      text run at (37,0) width 53: "this and "
-    LayoutText {#text} at (373,0) size 4x19
-      text run at (373,0) width 4: " "
-    LayoutText {#text} at (377,0) size 4x19
-      text run at (377,0) width 4: "."
-layer at (8,168) size 283x23
-  LayoutInline (relative positioned) {SPAN} at (0,0) size 283x23 [border: (2px solid #0000FF)]
-    LayoutText {#text} at (92,0) size 279x19
-      text run at (92,0) width 279: "this should have correctly placed focus rings"
-layer at (385,200) size 74x24
-  LayoutBlockFlow (positioned) {SPAN} at (377,194) size 74x24 [border: (2px solid #008000)]
-    LayoutText {#text} at (2,2) size 70x19
-      text run at (2,2) width 70: "but not this"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt
deleted file mode 100644
index f2712b7b..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutButton BUTTON",
-          "rect": [7, 7, 52, 24],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 11, 34, 16],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [16, 11, 34, 16],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutButton BUTTON",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Reset'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
deleted file mode 100644
index 91a75a37..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutButton INPUT",
-          "rect": [7, 7, 59, 24],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 11, 41, 16],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [16, 11, 41, 16],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutButton INPUT",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Submit'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png
deleted file mode 100644
index 17840a9f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png
deleted file mode 100644
index d83a454..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.png
deleted file mode 100644
index 15bd21b..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.txt
deleted file mode 100644
index 3780744..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 322x19
-          text run at (0,0) width 322: "This is a repaint test of inline blocks with overflow."
-      LayoutBlockFlow (anonymous) at (0,46) size 784x20
-        LayoutInline {SPAN} at (0,0) size 198x19
-          LayoutText {#text} at (0,0) size 98x19
-            text run at (0,0) width 98: "Here comes an "
-          LayoutBlockFlow {SPAN} at (98,0) size 100x20 [bgcolor=#C0C0C0]
-            LayoutText {#text} at (0,0) size 92x39
-              text run at (0,0) width 74: "inline block"
-              text run at (0,20) width 92: "with overflow."
-        LayoutText {#text} at (0,0) size 0x0
-layer at (8,44) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,36) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-color-change-expected.txt
deleted file mode 100644
index 5054768d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-color-change-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "rect": [8, 72, 38, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 72, 38, 19],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.png
deleted file mode 100644
index f4d098b..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.txt
deleted file mode 100644
index aa3ed74..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [0, 36, 800, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [0, 0, 800, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 36, 419, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline A id='link'",
-          "rect": [585, -1, 216, 234],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 0, 39, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline A id='link'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Home'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'crbug.com/424078: ensure inline elements get their outline painted'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.png
deleted file mode 100644
index d565fabc..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.txt
deleted file mode 100644
index f507fe5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 176, 100, 40],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='test'",
-          "rect": [5, 173, 95, 45],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 176, 89, 39],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutInline SPAN id='test'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsum'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'dolor\u00A0'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-style-change-in-scrolled-view-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-style-change-in-scrolled-view-expected.png
deleted file mode 100644
index c48d3b52..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-style-change-in-scrolled-view-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt
deleted file mode 100644
index 06a0136..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [2000, 2000],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 320, 411, 19],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Text Text Text Text Text Text Text Text Text Text Text Text Text'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
deleted file mode 100644
index f7b16a6..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "rect": [8, 8, 29, 24],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 29, 19],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Text'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
deleted file mode 100644
index f81e0e0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTextControl INPUT id='root'",
-      "position": [7, 7],
-      "bounds": [66, 24],
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 66, 24],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 64, 22],
-          "reason": "full"
-        }
-      ]
-    },
-    {
-      "name": "Child Containment Layer",
-      "position": [3, 3],
-      "bounds": [60, 18]
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='inner-editor'",
-      "position": [0, 1],
-      "bounds": [60, 16],
-      "shouldFlattenTransform": false,
-      "drawsContent": true
-    },
-    {
-      "name": "Scrolling Layer",
-      "bounds": [60, 16],
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [75, 16],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [73, 0, 1, 16],
-          "reason": "caret"
-        }
-      ]
-    },
-    {
-      "name": "Overflow Controls Host Layer",
-      "bounds": [60, 16]
-    },
-    {
-      "name": "Horizontal Scrollbar Layer",
-      "position": [0, 16],
-      "bounds": [60, 0],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='root'",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt
deleted file mode 100644
index 203026e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTextControl INPUT id='root'",
-      "position": [7, 7],
-      "bounds": [66, 24],
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 66, 24],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 64, 22],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [3, 4, 60, 16],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 4, 60, 16],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='root'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'test test test'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree-expected.png
deleted file mode 100644
index 038b890..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
deleted file mode 100644
index c9b03c65..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
+++ /dev/null
@@ -1,161 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 2350],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
-          "rect": [8, 2000, 777, 350],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
-          "rect": [8, 2000, 777, 350],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 2200, 777, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 2200, 777, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 2050, 777, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 2050, 777, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 2046, 774, 107],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 2046, 774, 107],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 2196, 655, 107],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 2196, 655, 107],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'This test checks that switching opacity'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'invalidates the full subtree.'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'This text should be visible in the'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'output.'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'This test checks that switching opacity'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'invalidates the full subtree.'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'This text should be visible in the'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'output.'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.png
deleted file mode 100644
index bb5ec77..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.txt
deleted file mode 100644
index 401c51f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [441, 123, 336, 404],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.png
deleted file mode 100644
index f608f8a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt
deleted file mode 100644
index 41c9863..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [537, 23, 240, 556],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
deleted file mode 100644
index 5515ee26..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.txt
deleted file mode 100644
index 50deb47b4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 319x19
-          text run at (0,0) width 319: "This tests repainting of a layer's children's outlines."
-layer at (8,44) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,36) size 784x2 [border: (1px inset #EEEEEE)]
-layer at (8,54) size 100x100
-  LayoutBlockFlow (relative positioned) {DIV} at (0,46) size 100x100 [bgcolor=#C0C0C0]
-    LayoutBlockFlow {DIV} at (0,0) size 100x100
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.png
deleted file mode 100644
index 58483bb..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.txt
deleted file mode 100644
index 10c2f0a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 207x19
-          text run at (0,0) width 207: "This tests for regressions against "
-        LayoutInline {I} at (0,0) size 541x19
-          LayoutInline {A} at (0,0) size 348x19 [color=#0000EE]
-            LayoutText {#text} at (207,0) size 348x19
-              text run at (207,0) width 348: "http://bugzilla.opendarwin.org/show_bug.cgi?id=7943"
-          LayoutText {#text} at (554,0) size 194x19
-            text run at (554,0) width 194: " Layer outline does not repaint"
-        LayoutText {#text} at (747,0) size 5x19
-          text run at (747,0) width 5: "."
-layer at (8,44) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,36) size 784x2 [border: (1px inset #EEEEEE)]
-layer at (18,194) size 100x100 clip at (19,195) size 98x98
-  LayoutBlockFlow {DIV} at (10,186) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (8,54) size 784x130
-  LayoutBlockFlow (relative positioned) {DIV} at (0,46) size 784x130
-layer at (18,64) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (10,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (148,64) size 100x100 backgroundClip at (138,54) size 100x100 clip at (138,54) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (140,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (278,64) size 100x100 backgroundClip at (268,54) size 5x5 clip at (268,54) size 5x5
-  LayoutBlockFlow (positioned) {DIV} at (270,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (408,64) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (400,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (538,64) size 100x100 backgroundClip at (548,74) size 100x100 clip at (548,74) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (530,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (668,64) size 100x100 backgroundClip at (773,169) size 5x5 clip at (773,169) size 5x5
-  LayoutBlockFlow (positioned) {DIV} at (660,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (18,324) size 100x100
-  LayoutBlockFlow (relative positioned) {DIV} at (0,296) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.png
deleted file mode 100644
index 58483bb..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.txt
deleted file mode 100644
index 10c2f0a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 207x19
-          text run at (0,0) width 207: "This tests for regressions against "
-        LayoutInline {I} at (0,0) size 541x19
-          LayoutInline {A} at (0,0) size 348x19 [color=#0000EE]
-            LayoutText {#text} at (207,0) size 348x19
-              text run at (207,0) width 348: "http://bugzilla.opendarwin.org/show_bug.cgi?id=7943"
-          LayoutText {#text} at (554,0) size 194x19
-            text run at (554,0) width 194: " Layer outline does not repaint"
-        LayoutText {#text} at (747,0) size 5x19
-          text run at (747,0) width 5: "."
-layer at (8,44) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,36) size 784x2 [border: (1px inset #EEEEEE)]
-layer at (18,194) size 100x100 clip at (19,195) size 98x98
-  LayoutBlockFlow {DIV} at (10,186) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (8,54) size 784x130
-  LayoutBlockFlow (relative positioned) {DIV} at (0,46) size 784x130
-layer at (18,64) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (10,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (148,64) size 100x100 backgroundClip at (138,54) size 100x100 clip at (138,54) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (140,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (278,64) size 100x100 backgroundClip at (268,54) size 5x5 clip at (268,54) size 5x5
-  LayoutBlockFlow (positioned) {DIV} at (270,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (408,64) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (400,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (538,64) size 100x100 backgroundClip at (548,74) size 100x100 clip at (548,74) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (530,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (668,64) size 100x100 backgroundClip at (773,169) size 5x5 clip at (773,169) size 5x5
-  LayoutBlockFlow (positioned) {DIV} at (660,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (18,324) size 100x100
-  LayoutBlockFlow (relative positioned) {DIV} at (0,296) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-relative-expected.txt
deleted file mode 100644
index 3bb3026c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-relative-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
-          "rect": [8, 152, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 152, 38, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset-expected.png
deleted file mode 100644
index 81f8439..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset-expected.txt
deleted file mode 100644
index e37c1ef..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [100, 120, 50, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [100, 120, 40, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'after'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2-expected.png
deleted file mode 100644
index 1bbc823..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2-expected.txt
deleted file mode 100644
index 499f5ac..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [102, 122, 50, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [102, 122, 40, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'after'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset3-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset3-expected.png
deleted file mode 100644
index 26d89f2..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset3-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1-expected.png
deleted file mode 100644
index 6d5004c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1-expected.txt
deleted file mode 100644
index 15f6569..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1-expected.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 80, 406, 119],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='pinkFloat'",
-          "rect": [378, 138, 70, 30],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='pinkFloat'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'away,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'comfortably enough, under her arm, with its legs'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hanging down,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'but generally, just as she had got its'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'neck nicely straightened\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'out, and was going to give the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog a blow with its head, it\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10-expected.png
deleted file mode 100644
index db38dfe..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10-expected.txt
deleted file mode 100644
index 2cb2c60..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10-expected.txt
+++ /dev/null
@@ -1,224 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 520, 408, 80],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 240, 407, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 360, 356, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 460, 355, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 440, 355, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 420, 355, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 400, 304, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 363, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 374, 48, 64],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'provoking to find that the hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'in the act of crawling away: besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'getting up and walking off to other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'here; the great\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2-expected.png
deleted file mode 100644
index ad4a240..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2-expected.txt
deleted file mode 100644
index 3cad07b..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2-expected.txt
+++ /dev/null
@@ -1,394 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 74, 418, 526],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 520, 408, 80],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 241, 407, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 240, 407, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 181, 407, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 180, 407, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 361, 356, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 360, 356, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 80, 355, 120],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 461, 355, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 460, 355, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 421, 355, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 420, 355, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 401, 304, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 400, 304, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [302, 441, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [302, 440, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [372, 404, 48, 81],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [372, 403, 48, 81],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 364, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 363, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [235, 180, 45, 20],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [485, 0, 15, 600],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'away,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'comfortably enough, under her arm, with its legs'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hanging down,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'but generally, just as she had got its'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'neck nicely straightened\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'out, and was going to give the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog a blow with its head, it\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline I id='would'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'would'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' twist itself round and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'look up in her face, with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'such a puzzled expression that she'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'could not help bursting out\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'laughing: and when she had got its'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'head down, and was going to\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'provoking to find that the hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'in the act of crawling away: besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'getting up and walking off to other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'here; the great\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3-expected.png
deleted file mode 100644
index 45c2ee0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3-expected.txt
deleted file mode 100644
index 01bdd5a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3-expected.txt
+++ /dev/null
@@ -1,238 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 520, 408, 80],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 240, 407, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 400, 406, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 360, 356, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 460, 355, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 440, 339, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 400, 304, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [302, 440, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [242, 440, 65, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [356, 423, 64, 81],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [372, 403, 48, 81],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'provoking to find that the hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'in the act of crawling away: besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'getting up and walking off to other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'here; the great\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4-expected.png
deleted file mode 100644
index 2074ad6..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4-expected.txt
deleted file mode 100644
index 74f8083..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4-expected.txt
+++ /dev/null
@@ -1,219 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 520, 408, 80],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 240, 407, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 460, 406, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 360, 356, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 420, 355, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 400, 304, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [302, 440, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [372, 467, 48, 17],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'provoking to find that the hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'in the act of crawling away: besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'getting up and walking off to other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about once'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'here; the great\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5-expected.png
deleted file mode 100644
index 11bc9db..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5-expected.txt
deleted file mode 100644
index c76aab6..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5-expected.txt
+++ /dev/null
@@ -1,237 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 520, 408, 80],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 240, 407, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [49, 360, 372, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 400, 356, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 440, 355, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 400, 304, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [49, 400, 302, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [302, 440, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [245, 440, 65, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [46, 363, 16, 65],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'provoking to find that the hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'in the act of crawling away: besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'getting up and walking off to other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and shouting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about once'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'here; the great\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6-expected.png
deleted file mode 100644
index 5e4939d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6-expected.txt
deleted file mode 100644
index 8d9e3bd..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6-expected.txt
+++ /dev/null
@@ -1,115 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 240, 407, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 360, 356, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 363, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [27, 363, 22, 20],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'provoking to find that the hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'in the act of crawling away: besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'getting up and walking off to other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'foo'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'game indeed.\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7-expected.png
deleted file mode 100644
index 2a85f22..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7-expected.txt
deleted file mode 100644
index 5395d56..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7-expected.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 420, 355, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [298, 440, 70, 19],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='theQueen'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8-expected.png
deleted file mode 100644
index d8cff8d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8-expected.txt
deleted file mode 100644
index 4c14d16..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8-expected.txt
+++ /dev/null
@@ -1,310 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 74, 418, 526],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 240, 407, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 180, 407, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 360, 406, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 440, 358, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 360, 356, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 80, 355, 119],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 420, 355, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 400, 354, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 400, 304, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 400, 297, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [184, 440, 68, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [302, 440, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 363, 48, 65],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [238, 180, 40, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'away,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'comfortably enough, under her arm, with its legs'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hanging down,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'but generally, just as she had got its'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'neck nicely straightened\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'out, and was going to give the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog a blow with its head, it\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' twist itself round and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'look up in her face, with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'such a puzzled expression that she'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'could not help bursting out\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'laughing: and when she had got its'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'head down, and was going to\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'provoking to find that the hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'in the act of crawling away: besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'getting up and walking off to other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for the hedgehogs;'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a furious'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and shouting \u2018Off'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about once in a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'minute.\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9-expected.png
deleted file mode 100644
index e9fb53b..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9-expected.txt
deleted file mode 100644
index 55afda8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9-expected.txt
+++ /dev/null
@@ -1,262 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 520, 408, 80],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 240, 407, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 180, 407, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 360, 356, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 460, 355, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 440, 355, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 420, 355, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 400, 304, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 383, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 363, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='yellowFloat'",
-          "rect": [372, 243, 48, 49],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' twist itself round and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'look up in her face, with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'such a puzzled expression that she'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'could not help bursting out\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'laughing: and when she had got its'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'head down, and was going to\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='yellowFloat'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'provoking to find that the hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'and was in the act of crawling away: besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'there was generally a ridge or furrow in the way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wanted to send the hedgehog to, and, as the doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'were always getting up and walking off to other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ground, Alice soon came to the conclusion that it was a very'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'here; the great\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-in-scrolled-clipped-block-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-in-scrolled-clipped-block-expected.png
deleted file mode 100644
index bcd57c2c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-in-scrolled-clipped-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-overflow-expected.txt
deleted file mode 100644
index 6551aba..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/line-overflow-expected.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [7, 122, 197, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 82, 192, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='t'",
-          "rect": [113, 92, 36, 49],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [113, 122, 36, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='t'",
-          "rect": [37, 142, 36, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [37, 142, 36, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Cras faucibus. Nunc'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'adipiscing, enim in scelerisque'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'convallis,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'augue '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='t'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'purus'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' eleifend'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'lacus, at sagittis eros leo'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'pulvinar velit. Integer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'sollicitudin nisi ut urna blandit'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'convallis.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/lines-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/lines-with-layout-delta-expected.txt
deleted file mode 100644
index 053b1ae..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/lines-with-layout-delta-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='target'",
-          "rect": [8, 58, 200, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 58, 38, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.png
deleted file mode 100644
index 7745e41..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.txt
deleted file mode 100644
index 5489d20..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x576
-      LayoutBlockFlow {P} at (0,0) size 784x40
-        LayoutText {#text} at (0,0) size 52x19
-          text run at (0,0) width 52: "Test for "
-        LayoutInline {I} at (0,0) size 728x39
-          LayoutInline {A} at (0,0) size 302x19 [color=#0000EE]
-            LayoutText {#text} at (51,0) size 302x19
-              text run at (51,0) width 302: "http://bugs.webkit.org/show_bug.cgi?id=12910"
-          LayoutText {#text} at (352,0) size 728x39
-            text run at (352,0) width 5: " "
-            text run at (356,0) width 372: "REGRESSION (r18756-r18765): list-bullet doesn't redraw"
-            text run at (0,20) width 368: "properly when changing the list's content using JavaScript"
-        LayoutText {#text} at (367,20) size 5x19
-          text run at (367,20) width 5: "."
-      LayoutBlockFlow {UL} at (0,56) size 784x20
-        LayoutListItem {LI} at (40,0) size 744x20
-          LayoutBlockFlow (anonymous) at (0,0) size 744x20
-            LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
-            LayoutText {#text} at (0,0) size 21x19
-              text run at (0,0) width 21: "foo"
-          LayoutBlockFlow {DIV} at (10,30) size 724x0
-      LayoutBlockFlow {UL} at (0,92) size 784x20
-        LayoutListItem {LI} at (40,0) size 744x20
-          LayoutBlockFlow (anonymous) at (0,0) size 744x20
-            LayoutListMarker (anonymous) at (-1,0) size 7x19: bullet
-            LayoutText {#text} at (22,0) size 20x19
-              text run at (22,0) width 20: "bar"
-          LayoutBlockFlow {DIV} at (10,30) size 724x0
-      LayoutBlockFlow {UL} at (0,128) size 784x20
-        LayoutListItem {LI} at (0,0) size 744x20
-          LayoutBlockFlow (anonymous) at (0,0) size 744x20
-            LayoutListMarker (anonymous) at (755,0) size 7x19: bullet
-            LayoutText {#text} at (723,0) size 21x19
-              text run at (723,0) width 21: "foo"
-          LayoutBlockFlow {DIV} at (10,30) size 724x0
-      LayoutBlockFlow {UL} at (0,164) size 784x20
-        LayoutListItem {LI} at (0,0) size 744x20
-          LayoutBlockFlow (anonymous) at (0,0) size 744x20
-            LayoutListMarker (anonymous) at (738,0) size 7x19: bullet
-            LayoutText {#text} at (702,0) size 20x19
-              text run at (702,0) width 20: "bar"
-          LayoutBlockFlow {DIV} at (10,30) size 724x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/make-children-non-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/make-children-non-inline-expected.txt
deleted file mode 100644
index 77eb001e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/make-children-non-inline-expected.txt
+++ /dev/null
@@ -1,353 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 64, 784, 280],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 64, 784, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 264, 784, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 264, 111, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 164, 111, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 144, 80, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 144, 80, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 104, 79, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 104, 79, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 284, 67, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 184, 67, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 324, 62, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 224, 62, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 124, 45, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 124, 45, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 84, 43, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 84, 43, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 64, 39, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 64, 39, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 304, 29, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 204, 29, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [8, 164, 10, 100],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Word,'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'words,'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'more words.'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'I could'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'write a book'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'about all the stuff'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'that comes'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'after'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'the break.'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame-expected.txt
deleted file mode 100644
index a8ff6ad..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [168, 11, 150, 16],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [10, 11, 150, 16],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [168, 11, 53, 16],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 11, 53, 16],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASSED'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASSED'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/multicol-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/multicol-repaint-expected.txt
deleted file mode 100644
index a15c1bd..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/multicol-repaint-expected.txt
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutMultiColumnFlowThread (anonymous)",
-          "rect": [9, 9, 400, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='a'",
-          "rect": [234, 10, 300, 57],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [234, 15, 300, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [234, 15, 50, 50],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [9, 10, 13, 57],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutMultiColumnFlowThread (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'XXXXXX'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/no-caret-repaint-in-non-content-editable-element-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/no-caret-repaint-in-non-content-editable-element-expected.png
deleted file mode 100644
index cb00abd1..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/no-caret-repaint-in-non-content-editable-element-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/non-text-link-invalidation-optimization-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/non-text-link-invalidation-optimization-expected.png
deleted file mode 100644
index 86ef49c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/non-text-link-invalidation-optimization-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/non-text-link-invalidation-optimization-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
deleted file mode 100644
index a4634db4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [164, 8, 145, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [75, 8, 61, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 57, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [353, 8, 52, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [136, 8, 28, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [319, 8, 24, 19],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'This test '",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox ' passes if '",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'only'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox ' text is invalidated and '",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox ' no '",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox ' images.'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/outline-clip-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/outline-clip-change-expected.txt
deleted file mode 100644
index 9193382..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/outline-clip-change-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) A id='link' class='updated'",
-          "rect": [43, 103, 95, 30],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [48, 108, 86, 19],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) A id='link' class='updated'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Lorem Ipsum'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/outline-continuations-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/outline-continuations-expected.png
deleted file mode 100644
index b976c8a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/outline-continuations-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/outline-continuations-expected.txt
deleted file mode 100644
index c42ad6a4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/outline-continuations-expected.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [18, 150, 200, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [18, 110, 200, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "rect": [16, 108, 90, 63],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "rect": [16, 148, 90, 23],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 150, 86, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 110, 86, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'CONTENTS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'CONTENTS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-delete-line-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-delete-line-expected.txt
deleted file mode 100644
index 904c5dd..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-delete-line-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='dv'",
-          "rect": [8, 74, 80, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 74, 72, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 74, 46, 36],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='dv'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsu'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-move-after-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-move-after-scroll-expected.png
deleted file mode 100644
index ffb212d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-move-after-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-outline-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-outline-repaint-expected.png
deleted file mode 100644
index 59ec7eed..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-outline-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-after-move-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-after-move-expected.png
deleted file mode 100644
index b3fd2f7b..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-after-move-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.png
deleted file mode 100644
index a55b4c5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.txt
deleted file mode 100644
index 14a9f78..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.txt
+++ /dev/null
@@ -1,134 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [2008, 2096],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 2008, 2096],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 585, 785, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 16, 784, 2072],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 52, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 16, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [124, 52, 383, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 16, 341, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 52, 116, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [785, 0, 15, 585],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [785, 585, 15, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [507, 52, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'You should see both vertical and horizontal scrollbars.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'This is the test for '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Bug 36461 - No vertical scrollbar after the CSS class change'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.png
deleted file mode 100644
index 072f741..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.txt
deleted file mode 100644
index 52e5e5ee..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 136, 44, 17],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'Passed'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'Test'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.png
deleted file mode 100644
index cae5dd4a7..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl-expected.png
deleted file mode 100644
index be9624a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.png
deleted file mode 100644
index 8cfb1dd..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/positioned-document-element-expected.txt
deleted file mode 100644
index 15dffc82d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/positioned-document-element-expected.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#008000",
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 800, 600],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) HTML class='changed'",
-          "rect": [0, 0, 800, 52],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 16, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) HTML class='changed'",
-          "rect": [100, 100, 440, 52],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [108, 116, 424, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [108, 116, 424, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 16, 424, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) HTML class='changed'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/positioned-great-grandparent-change-location-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/positioned-great-grandparent-change-location-expected.txt
deleted file mode 100644
index d163e791..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/positioned-great-grandparent-change-location-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [100, 200, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [100, 100, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [100, 200, 40, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [100, 100, 40, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Target'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/quotes-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/quotes-expected.txt
deleted file mode 100644
index ba11e45..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/quotes-expected.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 28, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [17, 28, 47, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [16, 28, 47, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [64, 28, 9, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [8, 28, 9, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [63, 28, 8, 19],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline Q id='q2' class='q-changed'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutInline \u003Cpseudo:before\u003E",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutQuote (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '{'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'quote 2'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutInline \u003Cpseudo:after\u003E",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutQuote (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '}'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/reflection-redraw-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/reflection-redraw-expected.txt
deleted file mode 100644
index b23b7692..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/reflection-redraw-expected.txt
+++ /dev/null
@@ -1,99 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [380, 267, 286, 59],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [70, 267, 286, 59],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [305, 34, 126, 182],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [305, 377, 126, 156],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'The color of this'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'text in the reflection'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'should be green'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'The color of this'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'text in the reflection'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'should be green'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'The color of this'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'text in the reflection'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'should be green'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'The color of this'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'text in the reflection'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'should be green'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/reflection-repaint-test-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/reflection-repaint-test-expected.txt
deleted file mode 100644
index 098fd3c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/reflection-repaint-test-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [22, 50, 226, 167],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 51, 72, 110],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt
deleted file mode 100644
index 0056a28..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 784, 20],
-          "reason": "geometry"
-        }
-      ]
-    },
-    {
-      "name": "LayoutInline (relative positioned) DIV id='block'",
-      "position": [68, 7],
-      "bounds": [365, 21],
-      "drawsContent": true,
-      "backfaceVisibility": "hidden",
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline (relative positioned) DIV id='block'",
-          "rect": [0, 0, 365, 21],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [1, 1, 363, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline (relative positioned) DIV id='block'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'When this layer moves it shouldn't generate a repaint rect.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/remove-block-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/remove-block-after-layout-expected.txt
deleted file mode 100644
index 5d0204dc..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/remove-block-after-layout-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target'",
-          "rect": [8, 108, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 108, 99, 39],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='target'",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/remove-inline-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/remove-inline-after-layout-expected.txt
deleted file mode 100644
index 9852c68..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/remove-inline-after-layout-expected.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 108, 784, 105],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [112, 193, 179, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [290, 108, 101, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [112, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [108, 193, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/remove-inline-layer-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/remove-inline-layer-after-layout-expected.txt
deleted file mode 100644
index 625c6caa..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/remove-inline-layer-after-layout-expected.txt
+++ /dev/null
@@ -1,82 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 108, 784, 105],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "rect": [112, 108, 179, 104],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [112, 193, 179, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [290, 108, 101, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [112, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [108, 193, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
deleted file mode 100644
index cc7f8e0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.txt
deleted file mode 100644
index d4ff02d1..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {DIV} at (0,0) size 784x22
-        LayoutTextControl {INPUT} at (0,0) size 154x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow (anonymous) at (0,22) size 784x20
-        LayoutText {#text} at (0,0) size 4x19
-          text run at (0,0) width 4: " "
-      LayoutBlockFlow {DIV} at (0,42) size 784x0
-layer at (10,11) size 150x16
-  LayoutBlockFlow {DIV} at (2,3) size 150x16
-caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png
deleted file mode 100644
index 4bb20d3..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt
deleted file mode 100644
index c2444832..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [548, 191, 23, 36],
-          "reason": "selection"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='lrblock'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='basic d1 vert'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '\u7B2C\u4E00\u6BB5\u843D paragraph 1'",
-      "reason": "selection"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt
deleted file mode 100644
index 23e47b3..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV",
-          "rect": [428, 38, 300, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='container'",
-          "rect": [408, 18, 300, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV",
-          "rect": [28, 38, 300, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='container'",
-          "rect": [8, 18, 300, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [428, 38, 270, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [28, 38, 270, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'There should only be one copy of this text.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom-expected.png
deleted file mode 100644
index f02a262d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt
deleted file mode 100644
index e294094..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt
+++ /dev/null
@@ -1,107 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#C0C0C0",
-      "paintInvalidations": [
-        {
-          "object": "LayoutIFrame (positioned) IFRAME",
-          "rect": [2, 65, 236, 235],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [2, 300, 236, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [3, 65, 235, 235],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [3, 65, 235, 235],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [3, 300, 235, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [3, 65, 225, 235],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 65, 55, 17],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [237, 65, 16, 235],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [237, 300, 16, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [238, 65, 15, 235],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [238, 300, 15, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame (positioned) IFRAME",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'scroll me'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-resized-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-resized-overflow-expected.txt
deleted file mode 100644
index d728e04..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/repaint-resized-overflow-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 212, 784, 52],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='s'",
-          "rect": [8, 208, 108, 56],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='s'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.png
deleted file mode 100644
index 35c93a4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-div-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-div-expected.png
deleted file mode 100644
index 1441421..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-div-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe-expected.png
deleted file mode 100644
index 371454f3..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scale-page-shrink-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scale-page-shrink-expected.png
deleted file mode 100644
index eeb42b8a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scale-page-shrink-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt
deleted file mode 100644
index 97d288d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 1895],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='scrollpanel'",
-          "rect": [677, 252, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-          "rect": [677, 252, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-          "rect": [677, 252, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [677, 252, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-          "rect": [677, 52, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-          "rect": [677, 52, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [677, 52, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='scrollpanel'",
-          "rect": [677, 52, 100, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='scrollpanel'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='scrollpanel'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='scrollpanel'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
deleted file mode 100644
index 50e595a43..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 5056],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) HEADER",
-      "position": [8, 28],
-      "bounds": [769, 1972],
-      "drawsContent": true,
-      "backfaceVisibility": "hidden",
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='searchbar'",
-          "rect": [10, 1822, 150, 150],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='recentlink'",
-          "rect": [10, 1822, 150, 150],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='searchbar'",
-          "rect": [10, 1422, 150, 150],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='recentlink'",
-          "rect": [10, 1422, 150, 150],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='searchbar'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='recentlink'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scrollbar-damage-and-full-viewport-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scrollbar-damage-and-full-viewport-repaint-expected.png
deleted file mode 100644
index 6970048..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scrollbar-damage-and-full-viewport-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scrollbar-invalidation-on-resize-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scrollbar-invalidation-on-resize-expected.png
deleted file mode 100644
index 414573c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scrollbar-invalidation-on-resize-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scrollbar-invalidation-on-resize-with-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scrollbar-invalidation-on-resize-with-border-expected.png
deleted file mode 100644
index 6791f112..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/scrollbar-invalidation-on-resize-with-border-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
deleted file mode 100644
index a446edbb..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 47, 137, 16],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 47, 58, 16],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'some text'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.png
deleted file mode 100644
index 08c4eb0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-after-delete-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-after-delete-expected.png
deleted file mode 100644
index 16a63c9..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-after-delete-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-after-delete-expected.txt
deleted file mode 100644
index de3175bc..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-after-delete-expected.txt
+++ /dev/null
@@ -1,351 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [39, 79, 154, 99],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='test'",
-          "rect": [38, 78, 152, 102],
-          "reason": "geometry"
-        }
-      ],
-      "underPaintInvalidations": [
-        {
-          "x": 194,
-          "y": 79,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 80,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 81,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 82,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 83,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 84,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 85,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 86,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 87,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 88,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 89,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 90,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 91,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 92,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 93,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 94,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 95,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 96,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 97,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 98,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 99,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 100,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 101,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 102,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 103,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 104,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 105,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 106,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 107,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 108,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 109,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 110,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 111,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 112,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 113,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 114,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 115,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 116,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 117,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 118,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 119,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 120,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 121,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 122,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 123,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 124,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 125,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 126,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 127,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 128,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='test'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-after-remove-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-after-remove-expected.png
deleted file mode 100644
index 7d60dd8d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-after-remove-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-after-remove-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-after-remove-expected.txt
deleted file mode 100644
index cbd44f10..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-after-remove-expected.txt
+++ /dev/null
@@ -1,382 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [39, 79, 154, 99],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='test'",
-          "rect": [38, 78, 152, 102],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [70, 158, 42, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [74, 79, 38, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [39, 79, 35, 19],
-          "reason": "geometry"
-        }
-      ],
-      "underPaintInvalidations": [
-        {
-          "x": 194,
-          "y": 79,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 80,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 81,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 82,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 83,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 84,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 85,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 86,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 87,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 88,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 89,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 90,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 91,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 92,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 93,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 94,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 95,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 96,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 97,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 98,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 99,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 100,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 101,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 102,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 103,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 104,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 105,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 106,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 107,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 108,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 109,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 110,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 111,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 112,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 113,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 114,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 115,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 116,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 117,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 118,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 119,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 120,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 121,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 122,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 123,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 124,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 125,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 126,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 127,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        },
-        {
-          "x": 194,
-          "y": 128,
-          "oldPixel": "#3333FF",
-          "newPixel": "#FFFFFF"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline SPAN id='removeme'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='test'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hello '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'world'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-clear-after-move-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-clear-after-move-expected.png
deleted file mode 100644
index d75f935..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-clear-after-move-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-clear-expected.txt
deleted file mode 100644
index 42c39f9..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-clear-expected.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='firstLine'",
-          "rect": [8, 8, 100, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 208, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='root'",
-          "rect": [8, 208, 100, 100],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 48, 97, 119],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 48, 8, 19],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='root'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='root'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='firstLine'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks-expected.png
deleted file mode 100644
index 2c4b5c6..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt
deleted file mode 100644
index 4f83d75..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 35, 77, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 11, 58, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutTableCell TD id='firstCell'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'First cell'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD id='secondCell'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Second cell'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-rl-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-rl-expected.png
deleted file mode 100644
index c69da74..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-rl-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-rl-expected.txt
deleted file mode 100644
index b2ab127..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection-rl-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [773, 38, 19, 83],
-          "reason": "selection"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox 'Testing both hit testing'",
-      "reason": "selection"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt
deleted file mode 100644
index 7629349..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 48, 33],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'xx'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'y'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
deleted file mode 100644
index d3b455e6..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [-8, 8, 48, 33],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'xx'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'y'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
deleted file mode 100644
index b7355d9a0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 33, 48],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'xx'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'y'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
deleted file mode 100644
index 7bf4046..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [7, 8, 33, 48],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'xx'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'y'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt
deleted file mode 100644
index 26bf4d9..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='target'",
-          "rect": [7, 7, 66, 24],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [10, 11, 60, 16],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 11, 60, 16],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutTextControl INPUT id='target'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'test test test'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png
deleted file mode 100644
index 8ebff79..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.txt
deleted file mode 100644
index cfcc12d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,20) size 784x480
-      LayoutBlockFlow {DIV} at (20,0) size 744x57
-        LayoutInline {SPAN} at (0,0) size 290x55
-          LayoutText {#text} at (0,1) size 290x55
-            text run at (0,1) width 290: "      multiple    "
-        LayoutText {#text} at (290,1) size 307x55
-          text run at (290,1) width 307: "     shadows      "
-      LayoutBlockFlow {DIV} at (100,157) size 100x100
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.png
deleted file mode 100644
index bfcc558..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
deleted file mode 100644
index 3feb1fb9..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [1059, 585],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 72, 836, 190],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Col 1'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics-expected.txt
deleted file mode 100644
index f1346a19..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='stacked'",
-          "rect": [19, 167, 200, 43],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [19, 168, 130, 41],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='stacked'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png
deleted file mode 100644
index 7a19add8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
deleted file mode 100644
index dc1edd0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [10, 11, 150, 16],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 11, 35, 16],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div'",
-          "rect": [8, 288, 10, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='div'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.png
deleted file mode 100644
index 20fd136..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.png
deleted file mode 100644
index 41911ac..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt
deleted file mode 100644
index 47e7b2f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [203, 336, 126, 45],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [203, 336, 126, 45],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [246, 106, 124, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [246, 106, 124, 28],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [354, 127, 105, 102],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [111, 84, 101, 102],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGImage image id='image'",
-          "rect": [352, 397, 98, 99],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGImage image id='image'",
-          "rect": [90, 208, 98, 98],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text id='text'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'This is some text'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGImage image id='image'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-expected.png
deleted file mode 100644
index 86ad1757..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size-expected.png
deleted file mode 100644
index 6887d2fa7..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-same-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-same-image-expected.png
deleted file mode 100644
index 86ad1757..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-same-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/append-text-node-to-tspan-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/append-text-node-to-tspan-expected.png
deleted file mode 100644
index fba000b..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/append-text-node-to-tspan-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/circle-move-invalidation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/circle-move-invalidation-expected.png
deleted file mode 100644
index 53edc38..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/circle-move-invalidation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/embedded-svg-size-changes-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/embedded-svg-size-changes-expected.png
deleted file mode 100644
index a366e42..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/embedded-svg-size-changes-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/ems-display-none-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/ems-display-none-expected.png
deleted file mode 100644
index 657ecd8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/ems-display-none-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/ems-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/ems-display-none-expected.txt
deleted file mode 100644
index b8cc40b..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/ems-display-none-expected.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 54, 572, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 54, 572, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 54, 572, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 54, 572, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [50, 54, 572, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='tspan'",
-          "rect": [50, 54, 572, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [50, 54, 572, 86],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='tspan'",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Two lines of text should be visible.'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Two lines of text should be visible.'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/exs-display-none-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/exs-display-none-expected.png
deleted file mode 100644
index 9c7f510..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/exs-display-none-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/exs-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/exs-display-none-expected.txt
deleted file mode 100644
index ca2788f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/exs-display-none-expected.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 50, 572, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 50, 572, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 50, 572, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 50, 572, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [50, 50, 572, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='tspan'",
-          "rect": [50, 50, 572, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [50, 50, 572, 82],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='tspan'",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Two lines of text should be visible.'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Two lines of text should be visible.'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/filter-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/filter-repaint-expected.png
deleted file mode 100644
index 74ef382..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/filter-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/filter-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/filter-repaint-expected.txt
deleted file mode 100644
index 8620d72..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/filter-repaint-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 400x400
-  LayoutSVGRoot {svg} at (0,0) size 400x400
-    LayoutSVGHiddenContainer {defs} at (0,0) size 0x0
-      LayoutSVGResourceFilter {filter} [id="over"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
-        [feComposite operation="OVER"]
-          [feFlood flood-color="#0000FF" flood-opacity="0.50"]
-          [feFlood flood-color="#FF0000" flood-opacity="0.50"]
-      LayoutSVGResourceFilter {filter} [id="in"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
-        [feComposite operation="IN"]
-          [feFlood flood-color="#0000FF" flood-opacity="0.50"]
-          [feFlood flood-color="#FF0000" flood-opacity="0.50"]
-      LayoutSVGResourceFilter {filter} [id="out"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
-        [feComposite operation="OUT"]
-          [feFlood flood-color="#0000FF" flood-opacity="0.50"]
-          [feFlood flood-color="#FF0000" flood-opacity="0.50"]
-      LayoutSVGResourceFilter {filter} [id="atop"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
-        [feComposite operation="ATOP"]
-          [feFlood flood-color="#0000FF" flood-opacity="0.50"]
-          [feFlood flood-color="#FF0000" flood-opacity="0.50"]
-      LayoutSVGResourceFilter {filter} [id="xor"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
-        [feComposite operation="XOR"]
-          [feFlood flood-color="#0000FF" flood-opacity="0.50"]
-          [feFlood flood-color="#FF0000" flood-opacity="0.50"]
-      LayoutSVGResourceFilter {filter} [id="arithmetic"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
-        [feComposite operation="ARITHMETIC" k1="0.50" k2="0.50" k3="0.50" k4="0.50"]
-          [feFlood flood-color="#0000FF" flood-opacity="0.50"]
-          [feFlood flood-color="#FF0000" flood-opacity="0.20"]
-    LayoutSVGRect {rect} at (10,10) size 50x50 [fill={[type=SOLID] [color=#000000]}] [x=10.00] [y=10.00] [width=50.00] [height=50.00]
-      [filter="over"] LayoutSVGResourceFilter {filter} at (10,10) size 50x50
-    LayoutSVGText {text} at (10,75) size 29x19 contains 1 chunk(s)
-      LayoutSVGInlineText {#text} at (10,75) size 29x19
-        chunk 1 text run 1 at (10.00,90.00) startOffset 0 endOffset 4 width 28.00: "over"
-    LayoutSVGRect {rect} at (70,10) size 50x50 [fill={[type=SOLID] [color=#000000]}] [x=70.00] [y=10.00] [width=50.00] [height=50.00]
-      [filter="in"] LayoutSVGResourceFilter {filter} at (70,10) size 50x50
-    LayoutSVGText {text} at (70,75) size 12x19 contains 1 chunk(s)
-      LayoutSVGInlineText {#text} at (70,75) size 12x19
-        chunk 1 text run 1 at (70.00,90.00) startOffset 0 endOffset 2 width 12.00: "in"
-    LayoutSVGRect {rect} at (130,10) size 50x50 [fill={[type=SOLID] [color=#000000]}] [x=130.00] [y=10.00] [width=50.00] [height=50.00]
-      [filter="out"] LayoutSVGResourceFilter {filter} at (130,10) size 50x50
-    LayoutSVGText {text} at (130,75) size 21x19 contains 1 chunk(s)
-      LayoutSVGInlineText {#text} at (130,75) size 21x19
-        chunk 1 text run 1 at (130.00,90.00) startOffset 0 endOffset 3 width 20.00: "out"
-    LayoutSVGRect {rect} at (10,110) size 50x50 [fill={[type=SOLID] [color=#000000]}] [x=10.00] [y=110.00] [width=50.00] [height=50.00]
-      [filter="atop"] LayoutSVGResourceFilter {filter} at (10,110) size 50x50
-    LayoutSVGText {text} at (10,175) size 27x19 contains 1 chunk(s)
-      LayoutSVGInlineText {#text} at (10,175) size 27x19
-        chunk 1 text run 1 at (10.00,190.00) startOffset 0 endOffset 4 width 27.00: "atop"
-    LayoutSVGRect {rect} at (70,110) size 50x50 [fill={[type=SOLID] [color=#000000]}] [x=70.00] [y=110.00] [width=50.00] [height=50.00]
-      [filter="xor"] LayoutSVGResourceFilter {filter} at (70,110) size 50x50
-    LayoutSVGText {text} at (70,175) size 22x19 contains 1 chunk(s)
-      LayoutSVGInlineText {#text} at (70,175) size 22x19
-        chunk 1 text run 1 at (70.00,190.00) startOffset 0 endOffset 3 width 21.00: "xor"
-    LayoutSVGRect {rect} at (130,110) size 50x50 [fill={[type=SOLID] [color=#000000]}] [x=130.00] [y=110.00] [width=50.00] [height=50.00]
-      [filter="arithmetic"] LayoutSVGResourceFilter {filter} at (130,110) size 50x50
-    LayoutSVGText {text} at (130,175) size 62x19 contains 1 chunk(s)
-      LayoutSVGInlineText {#text} at (130,175) size 62x19
-        chunk 1 text run 1 at (130.00,190.00) startOffset 0 endOffset 10 width 62.00: "arithmetic"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/filter-width-update-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/filter-width-update-expected.png
deleted file mode 100644
index 512499e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/filter-width-update-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/foreignObject-crash-on-hover-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/foreignObject-crash-on-hover-expected.png
deleted file mode 100644
index 3955477..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/foreignObject-crash-on-hover-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/hit-test-unclosed-subpaths-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/hit-test-unclosed-subpaths-expected.png
deleted file mode 100644
index 7545ed6..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/hit-test-unclosed-subpaths-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/hit-test-with-br-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/hit-test-with-br-expected.png
deleted file mode 100644
index e019d6f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/hit-test-with-br-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.png
deleted file mode 100644
index df4b377..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt
deleted file mode 100644
index 5b7716c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt
+++ /dev/null
@@ -1,111 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='inner'",
-          "rect": [0, 0, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [93, 85, 107, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [93, 85, 107, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 85, 101, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 85, 101, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [180, 120, 20, 20],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGPath polygon id='triangle'",
-          "rect": [180, 120, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [180, 60, 20, 20],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [80, 120, 20, 20],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGPath polygon id='triangle'",
-          "rect": [80, 120, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [80, 60, 20, 20],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGViewportContainer svg id='inner'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'right-aligned text'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGPath polygon id='triangle'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.png
deleted file mode 100644
index 931c320..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-creation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-creation-expected.png
deleted file mode 100644
index 931c320..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.png
deleted file mode 100644
index b3ee172c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt
deleted file mode 100644
index ce91d8f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [0, 15, 757, 364],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 247, 757, 132],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 247, 757, 132],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 130, 595, 133],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 130, 595, 133],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 15, 447, 129],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 15, 447, 129],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceLinearGradient linearGradient id='fillLinearGradient'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGResourceLinearGradient linearGradient id='strokeLinearGradient'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Gradient on fill'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Gradient on stroke'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Gradient on fill/stroke'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-creation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-creation-expected.png
deleted file mode 100644
index 3e7fce2..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.png
deleted file mode 100644
index 95eaf4b6..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt
deleted file mode 100644
index f70cd7f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt
+++ /dev/null
@@ -1,146 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [0, 15, 681, 364],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 247, 681, 132],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 247, 681, 132],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 130, 519, 133],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 130, 519, 133],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 15, 371, 129],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 15, 371, 129],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [16, 16, 18, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [16, 16, 18, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [8, 8, 17, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [8, 8, 17, 17],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourcePattern pattern id='fillPattern'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGResourcePattern pattern id='strokePattern'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Pattern on fill'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Pattern on stroke'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Pattern on fill/stroke'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-creation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-creation-expected.png
deleted file mode 100644
index ccfa7a9..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-stop-linked-gradient-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-stop-linked-gradient-expected.png
deleted file mode 100644
index a088fcc..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-stop-linked-gradient-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/modify-text-node-in-tspan-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/modify-text-node-in-tspan-expected.png
deleted file mode 100644
index fba000b..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/modify-text-node-in-tspan-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes-expected.png
deleted file mode 100644
index 0dc9b81..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/paintorder-filtered-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/paintorder-filtered-expected.png
deleted file mode 100644
index 711e7f7..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/paintorder-filtered-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-expected.png
deleted file mode 100644
index ef5c8ae..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.png
deleted file mode 100644
index b339c41..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.png
deleted file mode 100644
index 4b3c325..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.png
deleted file mode 100644
index fe57f0a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.png
deleted file mode 100644
index 7bc04da8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.png
deleted file mode 100644
index b541f63..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.png
deleted file mode 100644
index 8a9d3d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.png
deleted file mode 100644
index f358fbc..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.png
deleted file mode 100644
index 7bc04da8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/remove-text-node-from-tspan-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/remove-text-node-from-tspan-expected.png
deleted file mode 100644
index 3330509..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/remove-text-node-from-tspan-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/remove-tspan-from-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/remove-tspan-from-text-expected.png
deleted file mode 100644
index f1a5360..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/remove-tspan-from-text-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt
deleted file mode 100644
index 1273d94..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [9, 13, 48, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [9, 13, 48, 28],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGText text id='t'",
-          "rect": [9, 13, 48, 28],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGText text id='t'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Hello'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt
deleted file mode 100644
index 1273d94..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [9, 13, 48, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [9, 13, 48, 28],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGText text id='t'",
-          "rect": [9, 13, 48, 28],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGText text id='t'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Hello'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
deleted file mode 100644
index 7716315..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
deleted file mode 100644
index e293384..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ /dev/null
@@ -1,106 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [1026, 1036],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [24, 1011, 737, 21],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [179, 1012, 202, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [435, 1012, 171, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline A",
-          "rect": [385, 1011, 46, 21],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [386, 1012, 44, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [429, 1012, 7, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [380, 1012, 7, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'pservers-pattern-01-b \u2190'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline A",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'index'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u2192 script-handle-01-b'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.png
deleted file mode 100644
index ec01d59..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.png
deleted file mode 100644
index 6ba1b7a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.png
deleted file mode 100644
index 36c4899..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.txt
deleted file mode 100644
index df37f3b..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.txt
+++ /dev/null
@@ -1,2186 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [389, 37, 316, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [389, 37, 316, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [389, 37, 316, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [389, 37, 316, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRound'",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [262, 278, 303, 303],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [262, 278, 303, 303],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [262, 278, 303, 303],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [262, 278, 303, 303],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectRound'",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [506, 232, 238, 161],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [506, 232, 238, 161],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [506, 232, 238, 161],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [506, 232, 238, 161],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [6, 256, 238, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [6, 256, 238, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [6, 256, 238, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [6, 256, 238, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectTriangle'",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupTriangle'",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='contentTabGroupTriangle0'",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [31, 404, 188, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [23, 146, 188, 10],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [37, 404, 176, 98],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [29, 147, 176, 97],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [39, 404, 172, 96],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [31, 146, 172, 96],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [37, 6, 160, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [37, 6, 160, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [37, 6, 160, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [37, 6, 160, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRect'",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 291, 151, 25],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 291, 151, 25],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [15, 291, 151, 25],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [15, 291, 151, 25],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [7, 33, 151, 25],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [7, 33, 151, 25],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [7, 33, 151, 25],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [7, 33, 151, 25],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__0'",
-          "rect": [506, 232, 68, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__0'",
-          "rect": [389, 37, 68, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__1'",
-          "rect": [61, 256, 67, 31],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
-          "rect": [362, 278, 66, 66],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__1'",
-          "rect": [415, 332, 64, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__1'",
-          "rect": [570, 232, 64, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__1'",
-          "rect": [453, 37, 64, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-          "rect": [6, 256, 58, 31],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__2'",
-          "rect": [125, 256, 57, 31],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [66, 257, 57, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [66, 257, 57, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [66, 257, 57, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [66, 257, 57, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [66, 257, 57, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [511, 234, 57, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [511, 234, 57, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [511, 234, 57, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [394, 38, 57, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [394, 38, 57, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [394, 38, 57, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__3'",
-          "rect": [506, 422, 54, 55],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [575, 234, 53, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [575, 234, 53, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [575, 234, 53, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [458, 38, 53, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [458, 38, 53, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [458, 38, 53, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__2'",
-          "rect": [466, 382, 52, 53],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__3'",
-          "rect": [557, 37, 52, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [370, 285, 51, 51],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [370, 285, 51, 51],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [370, 285, 51, 51],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__3'",
-          "rect": [675, 232, 51, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [423, 339, 49, 48],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [423, 339, 49, 48],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [423, 339, 49, 48],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [11, 257, 48, 29],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [11, 257, 48, 29],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [11, 257, 48, 29],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [11, 257, 48, 29],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [11, 257, 48, 29],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
-          "rect": [630, 232, 48, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__2'",
-          "rect": [513, 37, 48, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [130, 257, 47, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [130, 257, 47, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [130, 257, 47, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [130, 257, 47, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [130, 257, 47, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__3'",
-          "rect": [179, 256, 42, 31],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [680, 234, 41, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [680, 234, 41, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [680, 234, 41, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [563, 38, 41, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [563, 38, 41, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [563, 38, 41, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [514, 429, 40, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [514, 429, 40, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [514, 429, 40, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [474, 389, 38, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [474, 389, 38, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [474, 389, 38, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [635, 234, 38, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [635, 234, 38, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [635, 234, 38, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [518, 38, 38, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [518, 38, 38, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [518, 38, 38, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [184, 257, 32, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [184, 257, 32, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [184, 257, 32, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [184, 257, 32, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [184, 257, 32, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__0'",
-          "rect": [178, 6, 19, 68],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__1'",
-          "rect": [178, 70, 19, 64],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__3'",
-          "rect": [178, 175, 19, 51],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__2'",
-          "rect": [178, 130, 19, 48],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [180, 11, 16, 57],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [180, 11, 16, 57],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [180, 11, 16, 57],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [180, 75, 16, 53],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [180, 75, 16, 53],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [180, 75, 16, 53],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [180, 180, 16, 41],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [180, 180, 16, 41],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [180, 180, 16, 41],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [180, 135, 16, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [180, 135, 16, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [180, 135, 16, 38],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__1'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Geodata'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Browser'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Download'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Folder'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Your'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Account'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__0_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Help'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox '& Info'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__1'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Biography'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__0_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Portrait'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Relations'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupTriangle'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Download'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Folder'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is oversize content that can be'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'hidden on tab-change'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Your'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Account'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Help'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox '& Info'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Geodata'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Browser'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='contentTabGroupTriangle0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is a tabgroup with triangular tab corners'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'and a double line tab. (use \"\\n\" as a line separator)'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Click on the second tab to see oversize content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Biography'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__0_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Relations'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Portrait'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Biography'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__0_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Portrait'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Relations'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Relations'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Portrait'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Biography'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-dom-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-dom-removal-expected.txt
deleted file mode 100644
index d837cf18..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-dom-removal-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='objectsToRemove'",
-          "rect": [0, 0, 212, 129],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 110, 162, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [50, 110, 162, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 20, 20],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='objectsToRemove'",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-mask-update-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-mask-update-expected.png
deleted file mode 100644
index 8f4b5c8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-mask-update-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-mask-update-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-mask-update-expected.txt
deleted file mode 100644
index e55b57d..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-mask-update-expected.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 3, 46, 22],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 3, 46, 22],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGText text id='text1'",
-          "rect": [10, 3, 46, 22],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 33, 43, 22],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text id='text2'",
-          "rect": [10, 33, 43, 22],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 33, 43, 17],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text1'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text2'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.png
deleted file mode 100644
index 60611653..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.txt
deleted file mode 100644
index d6cb3420..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 0, 553, 117],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text id='bounce'",
-          "rect": [80, 0, 553, 117],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [30, 0, 404, 59],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text id='bounce'",
-          "rect": [30, 0, 404, 59],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text id='bounce'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Repaint me!'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text id='bounce'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Repaint me!'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale-expected.png
deleted file mode 100644
index 97a5747..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale-expected.txt
deleted file mode 100644
index 7fb4946..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale-expected.txt
+++ /dev/null
@@ -1,424 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='text2g'",
-          "rect": [0, 63, 402, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g id='text1g'",
-          "rect": [0, 13, 402, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='text3g'",
-          "rect": [0, 113, 402, 87],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 114, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 114, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 114, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [0, 114, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 114, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 14, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 14, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 14, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [0, 14, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 14, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [210, 13, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [210, 113, 100, 87],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [210, 113, 100, 48],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [210, 13, 100, 48],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [310, 114, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [310, 114, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [310, 114, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [310, 14, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [310, 14, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [310, 14, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [210, 114, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [210, 14, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='text3g'",
-          "rect": [0, 3, 14, 4],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='text1g'",
-          "rect": [0, 0, 8, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 8, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 8, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 8, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [0, 0, 8, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 0, 8, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 3, 7, 3],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 3, 7, 3],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 3, 7, 3],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [0, 3, 7, 3],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 3, 7, 3],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [9, 3, 5, 3],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [9, 3, 5, 3],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [9, 3, 5, 3],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 5, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 0, 5, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [0, 0, 5, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [6, 3, 4, 4],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [6, 3, 4, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [6, 3, 4, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g id='text1g'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS '",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGForeignObject foreignObject",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGContainer g id='text2g'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGContainer g id='text3g'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS '",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGForeignObject foreignObject",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-selection-text-05-t-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-selection-text-05-t-expected.png
deleted file mode 100644
index 12a8b8f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-selection-text-05-t-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-selection-text-05-t-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-selection-text-05-t-expected.txt
deleted file mode 100644
index 7b9873c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-selection-text-05-t-expected.txt
+++ /dev/null
@@ -1,962 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 523, 449, 77],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [186, 13, 128, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [520, 13, 127, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [353, 13, 127, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [266, 485, 113, 29],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [266, 201, 113, 21],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [428, 485, 104, 29],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [428, 201, 104, 21],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [590, 485, 95, 29],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [590, 201, 95, 21],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [376, 36, 81, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 491, 79, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 441, 79, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 391, 79, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 341, 79, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 291, 79, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 241, 79, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 191, 79, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 141, 79, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 91, 79, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [590, 285, 62, 54],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [590, 435, 62, 29],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [590, 151, 62, 21],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [428, 285, 61, 54],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [266, 285, 61, 54],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [428, 435, 61, 29],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [266, 435, 61, 29],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [428, 151, 61, 21],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [266, 151, 61, 21],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [225, 36, 50, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [428, 335, 46, 54],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [590, 335, 45, 54],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [266, 335, 44, 54],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [563, 36, 41, 34],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [573, 235, 39, 54],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [411, 235, 39, 54],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [546, 101, 38, 21],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [250, 235, 37, 54],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [250, 385, 37, 45],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [398, 101, 37, 21],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [250, 101, 37, 21],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [565, 385, 29, 45],
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [411, 385, 29, 45],
-          "reason": "selection"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1.x 1.y'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4.x 1.y'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2.x 1.y'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1.x 4.y'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4.x 4.y'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2.x 4.y'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1.x 2.y'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4.x 2.y'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2.x 2.y'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox 'text-anchor'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox 'start'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1234'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '234'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '234'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '234'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox 'text-anchor'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox 'middle'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1234'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '234'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '234'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '234'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox 'text-anchor'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox 'end'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1234'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '234'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '234'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '1'",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '234'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGText text id='revision'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '$Revision: 1.8 $'",
-      "reason": "selection"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-viewbox-rescale-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-viewbox-rescale-expected.png
deleted file mode 100644
index 8d0f253..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-viewbox-rescale-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-viewbox-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-viewbox-rescale-expected.txt
deleted file mode 100644
index ee4b4ff..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-viewbox-rescale-expected.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 143, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 143, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [59, 143, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [59, 143, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='inner2'",
-          "rect": [59, 143, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 43, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 43, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 43, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [59, 43, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [59, 43, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='inner1'",
-          "rect": [59, 43, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 8, 2],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 8, 2],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 8, 2],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [0, 0, 8, 2],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 0, 8, 2],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='inner1'",
-          "rect": [0, 0, 8, 2],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGViewportContainer svg id='inner1'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "full"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='inner2'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "full"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-xy-updates-SVGList-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-xy-updates-SVGList-expected.png
deleted file mode 100644
index 991085e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-xy-updates-SVGList-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt
deleted file mode 100644
index 5a05ace..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [808, 621],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [208, 13, 166, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='ttt'",
-          "rect": [208, 13, 166, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [18, 193, 166, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='ttt'",
-          "rect": [18, 193, 166, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text id='ttt'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Passes, if text is at 200x20'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-dynamic-positioning-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-dynamic-positioning-expected.png
deleted file mode 100644
index 2889a15..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-dynamic-positioning-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt
deleted file mode 100644
index dc51262..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [200, 185, 251, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='ts'",
-          "rect": [200, 185, 251, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [200, 185, 251, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [20, 5, 251, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='ts'",
-          "rect": [20, 5, 251, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [20, 5, 251, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='ts'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'This text should be at visible at 200,200'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.png
deleted file mode 100644
index 1afe540..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.txt
deleted file mode 100644
index 340feec..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [90, 115, 64, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text id='status'",
-          "rect": [90, 115, 64, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [90, 115, 44, 19],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text id='status'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Passed'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/use-detach-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/use-detach-expected.png
deleted file mode 100644
index 84a7fe53..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/use-detach-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/use-event-handler-on-use-element-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/use-event-handler-on-use-element-expected.png
deleted file mode 100644
index 9940772..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/use-event-handler-on-use-element-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.png
deleted file mode 100644
index b60fc22..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.txt
deleted file mode 100644
index a9df1d4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.txt
+++ /dev/null
@@ -1,2054 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='Windows'",
-          "rect": [38, 81, 760, 454],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='Windows'",
-          "rect": [38, 92, 760, 443],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [37, 142, 551, 394],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarbigWindow'",
-          "rect": [37, 142, 551, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [37, 522, 551, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='bigWindow'",
-          "rect": [38, 143, 549, 392],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupbigWindow'",
-          "rect": [38, 143, 549, 392],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupbigWindow'",
-          "rect": [38, 143, 549, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [76, 181, 317, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarnestedWindow'",
-          "rect": [76, 181, 317, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [76, 405, 317, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='nestedWindow'",
-          "rect": [77, 182, 315, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupnestedWindow'",
-          "rect": [77, 182, 315, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupnestedWindow'",
-          "rect": [77, 182, 315, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='navWindow'",
-          "rect": [613, 81, 185, 169],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='decoGroupnavWindow'",
-          "rect": [613, 81, 185, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
-          "rect": [613, 81, 185, 159],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='decoGroupMinimizednavWindow'",
-          "rect": [613, 81, 185, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [623, 91, 176, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [76, 194, 176, 145],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarcolourPickerWindow'",
-          "rect": [76, 194, 176, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [623, 237, 176, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [76, 325, 176, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='navWindow'",
-          "rect": [624, 92, 174, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupnavWindow'",
-          "rect": [624, 92, 174, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='colourPickerWindow'",
-          "rect": [77, 195, 174, 143],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupcolourPickerWindow'",
-          "rect": [77, 195, 174, 143],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupcolourPickerWindow'",
-          "rect": [77, 195, 174, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [311, 376, 160, 145],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarsmallWindow'",
-          "rect": [311, 376, 160, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [311, 507, 160, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='textNavWindow'",
-          "rect": [632, 101, 159, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='smallWindow'",
-          "rect": [312, 377, 158, 143],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupsmallWindow'",
-          "rect": [312, 377, 158, 143],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupsmallWindow'",
-          "rect": [312, 377, 158, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [248, 343, 145, 66],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarstatusWindow'",
-          "rect": [248, 343, 145, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='statusWindow'",
-          "rect": [249, 344, 143, 64],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupstatusWindow'",
-          "rect": [249, 344, 143, 64],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupstatusWindow'",
-          "rect": [249, 344, 143, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='textSmallWindow'",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 326, 133, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [80, 326, 133, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 182, 131, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [80, 182, 131, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 406, 125, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [80, 406, 125, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [38, 475, 121, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [257, 364, 120, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [257, 364, 120, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [257, 364, 120, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [257, 364, 120, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [257, 364, 120, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [257, 364, 120, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='textStatusWindow'",
-          "rect": [257, 364, 120, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='minimalWindow'",
-          "rect": [39, 476, 119, 48],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupminimalWindow'",
-          "rect": [39, 476, 119, 48],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [43, 480, 115, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [43, 480, 115, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [43, 480, 115, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [43, 480, 115, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [43, 480, 115, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [43, 480, 115, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='textMinimalWindow'",
-          "rect": [43, 480, 115, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [41, 524, 101, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [41, 524, 101, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [314, 508, 90, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [314, 508, 90, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [252, 344, 73, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [252, 344, 73, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [314, 378, 68, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [314, 378, 68, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 196, 67, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [80, 196, 67, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [41, 143, 57, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [41, 143, 57, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
-          "rect": [757, 94, 36, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [627, 238, 33, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [627, 238, 33, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [613, 81, 16, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [616, 153, 13, 81],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [616, 153, 13, 81],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [768, 93, 13, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [768, 93, 13, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [557, 144, 13, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [362, 183, 13, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [440, 379, 13, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [375, 345, 13, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [376, 183, 12, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [376, 183, 12, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [782, 94, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [782, 94, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [782, 94, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [782, 94, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [615, 99, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [615, 83, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [615, 83, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [571, 144, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [571, 144, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [454, 379, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [454, 379, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [235, 197, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [235, 197, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [222, 197, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [427, 387, 12, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [349, 192, 12, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [615, 123, 12, 3],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-          "rect": [769, 94, 11, 11],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-          "rect": [769, 94, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [769, 94, 11, 11],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [769, 94, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonbigWindow'",
-          "rect": [558, 145, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [558, 145, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonnestedWindow'",
-          "rect": [363, 184, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [363, 184, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonsmallWindow'",
-          "rect": [441, 380, 11, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [441, 380, 11, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonstatusWindow'",
-          "rect": [376, 346, 11, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [376, 346, 11, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [756, 102, 11, 4],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [756, 102, 11, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [545, 153, 11, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [209, 205, 11, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [363, 354, 11, 3],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonnestedWindow'",
-          "rect": [377, 184, 10, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [377, 184, 10, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-          "rect": [783, 95, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-          "rect": [783, 95, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [783, 95, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [783, 95, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-          "rect": [616, 100, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [616, 100, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-          "rect": [616, 84, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [616, 84, 10, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [616, 84, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonbigWindow'",
-          "rect": [572, 145, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [572, 145, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonsmallWindow'",
-          "rect": [455, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [455, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [455, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonsmallWindow'",
-          "rect": [428, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [428, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [428, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonnestedWindow'",
-          "rect": [350, 185, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [350, 185, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtoncolourPickerWindow'",
-          "rect": [236, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [236, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [236, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtoncolourPickerWindow'",
-          "rect": [223, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [223, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [783, 95, 10, 9],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [783, 95, 10, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-          "rect": [616, 116, 10, 9],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [616, 116, 10, 9],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [616, 116, 10, 9],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [572, 146, 10, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [350, 185, 10, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-          "rect": [757, 95, 9, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-          "rect": [757, 95, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [757, 95, 9, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [757, 95, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonbigWindow'",
-          "rect": [546, 146, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [546, 146, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonstatusWindow'",
-          "rect": [364, 346, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [364, 346, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [364, 346, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtoncolourPickerWindow'",
-          "rect": [210, 198, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [210, 198, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [210, 198, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [757, 95, 9, 9],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [757, 95, 9, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [546, 146, 9, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [377, 185, 9, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [-1, 20, 7, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [-1, 20, 7, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [-1, 20, 7, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [-1, 29, 7, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 22, 5, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 22, 5, 9],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGHiddenContainer symbol id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer symbol id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer symbol id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='Windows'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='navWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='textNavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This window should'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'contain navigation tools'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Click on button'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox ''Resize Navigation Window' for a'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'random resize of this Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Note that this window also'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'features a window decoration'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Statusbar'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='bigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is a big movable window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='nestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This window contains other windows'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='colourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupcolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Changing a colour changes background'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupcolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarcolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Colour Picker'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtoncolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtoncolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtoncolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='statusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='textStatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is a none-moveable'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'none-closeable status'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Status Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Nested middlesize Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='smallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='textSmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This window has a callback'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'function indicating mouse'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'movements in the statusbar'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'and alerting window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Callback function is active'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Small Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='minimalWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupminimalWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='textMinimalWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is a minimal window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'without title and status bar.'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'it is also not moveable'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupminimalWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Big Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='Windows'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g id='navWindow'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g id='decoGroupnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='decoGroupMinimizednavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Navigation Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-coords-viewattr-01-b-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-coords-viewattr-01-b-expected.png
deleted file mode 100644
index 235f06c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-coords-viewattr-01-b-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-foreignObject-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-foreignObject-expected.png
deleted file mode 100644
index 5b32ee76..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-foreignObject-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table-collapsed-border-expected.txt
deleted file mode 100644
index 6103ea4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table-collapsed-border-expected.txt
+++ /dev/null
@@ -1,377 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTable TABLE",
-          "rect": [8, 194, 108, 82],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableSection TBODY",
-          "rect": [8, 194, 108, 82],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR id='r2'",
-          "rect": [8, 224, 108, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE",
-          "rect": [8, 102, 99, 82],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableSection TBODY",
-          "rect": [8, 102, 99, 82],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 338, 99, 30],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 286, 99, 30],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 154, 99, 30],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 102, 99, 30],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 316, 99, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR id='r'",
-          "rect": [8, 132, 99, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE id='t'",
-          "rect": [8, 10, 95, 82],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 62, 95, 30],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 10, 95, 30],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 40, 95, 22],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD id='d2'",
-          "rect": [22, 224, 90, 22],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [22, 338, 81, 26],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [22, 290, 81, 26],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [22, 154, 81, 26],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [22, 106, 81, 26],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='d3'",
-          "rect": [22, 316, 81, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='d'",
-          "rect": [22, 132, 81, 22],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 317, 76, 19],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 133, 76, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 339, 49, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 155, 49, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 295, 43, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 111, 43, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 225, 34, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutTable TABLE",
-          "rect": [76, 286, 31, 82],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [12, 224, 10, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [12, 132, 10, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [17, 225, 4, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [17, 133, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTableCell TD id='d'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTableCell TD id='d2'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTable TABLE id='t'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR id='r'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'sit amet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR id='r2'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD id='d3'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'ipsum dolor'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'sit amet'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt
deleted file mode 100644
index 186df46..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 8, 114, 54],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD id='foo'",
-          "rect": [10, 10, 56, 50],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='blockDiv'",
-          "rect": [90, 30, 20, 20],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [90, 30, 12, 19],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCell TD id='foo'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='blockDiv'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.png
deleted file mode 100644
index 81a3760..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.txt
deleted file mode 100644
index 996754c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COL id='target'",
-          "rect": [8, 28, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [72, 96],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COL id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.png
deleted file mode 100644
index 81a3760..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt
deleted file mode 100644
index 996754c..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COL id='target'",
-          "rect": [8, 28, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [72, 96],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COL id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.png
deleted file mode 100644
index 7b758b0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.txt
deleted file mode 100644
index 7a43ec71..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COL id='target'",
-          "rect": [8, 28, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [72, 96],
-      "bounds": [59, 64],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [133, 96],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COL id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.png
deleted file mode 100644
index 7b758b0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt
deleted file mode 100644
index 7a43ec71..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COL id='target'",
-          "rect": [8, 28, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [72, 96],
-      "bounds": [59, 64],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [133, 96],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COL id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.png
deleted file mode 100644
index 81a3760..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.txt
deleted file mode 100644
index e3dd27ea..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COLGROUP id='target'",
-          "rect": [8, 28, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD id='target'",
-      "position": [72, 96],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COLGROUP id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.png
deleted file mode 100644
index 81a3760..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt
deleted file mode 100644
index e3dd27ea..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COLGROUP id='target'",
-          "rect": [8, 28, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD id='target'",
-      "position": [72, 96],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COLGROUP id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.png
deleted file mode 100644
index 5e5be73..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.txt
deleted file mode 100644
index 8e0f5005..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableRow TR id='target'",
-      "position": [8, 96],
-      "bounds": [186, 64],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR id='target'",
-          "rect": [0, 0, 186, 64],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [64, 0],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.png
deleted file mode 100644
index 5e5be73..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt
deleted file mode 100644
index 8e0f5005..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableRow TR id='target'",
-      "position": [8, 96],
-      "bounds": [186, 64],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR id='target'",
-          "rect": [0, 0, 186, 64],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [64, 0],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.png
deleted file mode 100644
index 5e5be73..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.txt
deleted file mode 100644
index 3aaba5e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR id='target'",
-          "rect": [8, 96, 186, 64],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [72, 96],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.png
deleted file mode 100644
index 5e5be73..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.txt
deleted file mode 100644
index 3aaba5e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR id='target'",
-          "rect": [8, 96, 186, 64],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [72, 96],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.png
deleted file mode 100644
index 37ed9c13..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt
deleted file mode 100644
index 576d0d4e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableSection TBODY id='target'",
-      "position": [8, 28],
-      "bounds": [186, 134],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableSection TBODY id='target'",
-          "rect": [0, 0, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableRow TR",
-      "position": [0, 68],
-      "bounds": [186, 64],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [64, 0],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.png
deleted file mode 100644
index 37ed9c13..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt
deleted file mode 100644
index 576d0d4e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableSection TBODY id='target'",
-      "position": [8, 28],
-      "bounds": [186, 134],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableSection TBODY id='target'",
-          "rect": [0, 0, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableRow TR",
-      "position": [0, 68],
-      "bounds": [186, 64],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [64, 0],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.png
deleted file mode 100644
index 07ced2e4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.txt
deleted file mode 100644
index f604f53..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableSection TBODY id='target'",
-      "position": [8, 28],
-      "bounds": [186, 134],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableSection TBODY id='target'",
-          "rect": [0, 0, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [64, 68],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.png
deleted file mode 100644
index 07ced2e4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt
deleted file mode 100644
index f604f53..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableSection TBODY id='target'",
-      "position": [8, 28],
-      "bounds": [186, 134],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableSection TBODY id='target'",
-          "rect": [0, 0, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [64, 68],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt
deleted file mode 100644
index a68a906..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt
+++ /dev/null
@@ -1,114 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [0, 52, 106, 238],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [0, 292, 106, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [0, 100, 106, 190],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [0, 102, 106, 46],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 52, 102, 238],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 292, 102, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 102, 102, 46],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 400, 46, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 161, 46, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 115, 46, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 66, 46, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ROW1'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ROW2'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt
deleted file mode 100644
index e2165062..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 52, 102, 476],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 280, 63, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 90, 63, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'MIDDLE'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-row-repaint-expected.txt
deleted file mode 100644
index 1fe1a0f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-row-repaint-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 102, 102, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 192, 63, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 142, 63, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'MIDDLE'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-append-dirty-lines-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-append-dirty-lines-expected.txt
deleted file mode 100644
index 4770ec4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-append-dirty-lines-expected.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [7, 44, 757, 139],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse placerat. Morbi tristique. Mauris eu lacus sed felis'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'pellentesque cursus. Proin vitae nulla. Vivamus in ipsum. Etiam mi. Nam malesuada purus in sem. Sed eget elit vel erat'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'laoreet feugiat. Phasellus mollis pulvinar mi. Etiam ut neque sed eros egestas laoreet. Vestibulum ullamcorper, nulla non'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'feugiat molestie, mi lorem bibendum leo, ac gravida orci nunc nec nulla. Nunc nunc lorem, rhoncus et, rutrum ac,'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'fermentum ut, tortor. Sed rhoncus. Quisque enim metus, luctus tincidunt, vestibulum eu, vestibulum eu, libero. Mauris'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'sagittis aliquam nunc. Nullam pharetra molestie eros. Donec tempus purus ut ligula. Phasellus non nisl. Etiam eu mauris.'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'Curabitur a velit.'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.png
deleted file mode 100644
index 694e43a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.txt
deleted file mode 100644
index ef8375fb..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='to-be-changed'",
-          "rect": [18, 130, 269, 40],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 130, 251, 39],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 130, 82, 19],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [295, 102, 15, 400],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='to-be-changed'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'After change'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-2-expected.png
deleted file mode 100644
index 83befc3..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt
deleted file mode 100644
index bec801a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 18, 233, 19],
-          "reason": "selection"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox 'Should have blue, not gray, highlight'",
-      "reason": "selection"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-expected.png
deleted file mode 100644
index 3df6c6f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-expected.txt
deleted file mode 100644
index 90d1fb2..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-selection-rect-in-overflow-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 197, 19],
-          "reason": "selection"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox 'Should have green background'",
-      "reason": "selection"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.png
deleted file mode 100644
index bb582ed..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.txt
deleted file mode 100644
index 076a8ffc..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x562
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 172x19
-          text run at (0,0) width 172: "This is a regression test for "
-        LayoutInline {I} at (0,0) size 595x19
-          LayoutInline {A} at (0,0) size 348x19 [color=#0000EE]
-            LayoutText {#text} at (172,0) size 348x19
-              text run at (172,0) width 348: "http://bugzilla.opendarwin.org/show_bug.cgi?id=7301"
-          LayoutText {#text} at (519,0) size 248x19
-            text run at (519,0) width 5: " "
-            text run at (523,0) width 244: "Text shadow does not repaint correctly"
-        LayoutText {#text} at (766,0) size 5x19
-          text run at (766,0) width 5: "."
-      LayoutBlockFlow {DIV} at (30,68) size 724x21
-        LayoutInline {SPAN} at (0,0) size 202x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 202x20
-            text run at (0,0) width 202: "Lorem ipsum dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,119) size 724x21
-        LayoutInline {SPAN} at (0,0) size 202x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 202x20
-            text run at (0,0) width 202: "Lorem ipsum dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,170) size 724x21
-        LayoutText {#text} at (0,1) size 88x19
-          text run at (0,1) width 88: "Lorem ipsum "
-        LayoutInline {SPAN} at (0,0) size 100x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (88,0) size 100x20
-            text run at (88,0) width 100: "dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,221) size 724x21
-        LayoutInline {SPAN} at (0,0) size 97x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 97x20
-            text run at (0,0) width 97: "Lorem ipsum"
-        LayoutText {#text} at (97,1) size 89x19
-          text run at (97,1) width 89: " dolor sit amet"
-layer at (8,44) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,36) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.png
deleted file mode 100644
index bb582ed..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.txt
deleted file mode 100644
index 076a8ffc..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x562
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 172x19
-          text run at (0,0) width 172: "This is a regression test for "
-        LayoutInline {I} at (0,0) size 595x19
-          LayoutInline {A} at (0,0) size 348x19 [color=#0000EE]
-            LayoutText {#text} at (172,0) size 348x19
-              text run at (172,0) width 348: "http://bugzilla.opendarwin.org/show_bug.cgi?id=7301"
-          LayoutText {#text} at (519,0) size 248x19
-            text run at (519,0) width 5: " "
-            text run at (523,0) width 244: "Text shadow does not repaint correctly"
-        LayoutText {#text} at (766,0) size 5x19
-          text run at (766,0) width 5: "."
-      LayoutBlockFlow {DIV} at (30,68) size 724x21
-        LayoutInline {SPAN} at (0,0) size 202x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 202x20
-            text run at (0,0) width 202: "Lorem ipsum dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,119) size 724x21
-        LayoutInline {SPAN} at (0,0) size 202x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 202x20
-            text run at (0,0) width 202: "Lorem ipsum dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,170) size 724x21
-        LayoutText {#text} at (0,1) size 88x19
-          text run at (0,1) width 88: "Lorem ipsum "
-        LayoutInline {SPAN} at (0,0) size 100x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (88,0) size 100x20
-            text run at (88,0) width 100: "dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,221) size 724x21
-        LayoutInline {SPAN} at (0,0) size 97x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 97x20
-            text run at (0,0) width 97: "Lorem ipsum"
-        LayoutText {#text} at (97,1) size 89x19
-          text run at (97,1) width 89: " dolor sit amet"
-layer at (8,44) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,36) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
deleted file mode 100644
index 7965d244..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.txt
deleted file mode 100644
index 40af8a0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [7, 7, 183, 40],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [9, 11, 179, 16],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 175, 16],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [9, 30, 164, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [173, 30, 15, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl TEXTAREA id='editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTextControl TEXTAREA id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox '------------------------------------------------------------'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/transform-inline-layered-child-expected.txt
deleted file mode 100644
index 95f325b..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/transform-inline-layered-child-expected.txt
+++ /dev/null
@@ -1,229 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='box'",
-          "rect": [61, 87, 178, 206],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='child'",
-          "rect": [135, 360, 160, 196],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [135, 361, 159, 195],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='box'",
-          "rect": [100, 100, 100, 180],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='child'",
-          "rect": [300, 300, 80, 179],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [300, 302, 80, 177],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='box'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN id='child'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'A B C'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'D E F'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'G H I'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'J K L'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'M N O'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'P Q R'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'S T U'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'V W X'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Y Z'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='box'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN id='child'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'A B C'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'D E F'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'G H I'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'J K L'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'M N O'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'P Q R'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'S T U'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'V W X'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Y Z'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/transform-layout-repaint-expected.txt
deleted file mode 100644
index 4c7eaf71..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/transform-layout-repaint-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [40, 50, 208, 118],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [52, 51, 43, 32],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-child-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-child-expected.png
deleted file mode 100644
index 1bac3eb..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-child-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-parent-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-parent-expected.png
deleted file mode 100644
index 1211482..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-parent-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-same-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-same-expected.png
deleted file mode 100644
index eea0a192..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/vertical-overflow-same-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/window-resize-vertical-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/window-resize-vertical-writing-mode-expected.txt
deleted file mode 100644
index 9a5a199..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/invalidation/window-resize-vertical-writing-mode-expected.txt
+++ /dev/null
@@ -1,427 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [939, 235],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 939, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 923, 219],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 7, 920, 213],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [339, 0, 600, 500],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 600, 500],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [339, 235, 600, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [505, 8, 426, 484],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [507, 8, 423, 482],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'BBBB'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'CCCC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'DDDD'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'EEEE'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'FFFF'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'GGGG'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'HHHH'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'IIII JJJJ'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'KKKK'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'LLLL'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'MMMM'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'NNNN'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [939, 235],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [200, 0, 939, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 939, 235],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 939, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [208, 8, 923, 219],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 923, 219],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [210, 7, 920, 213],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 7, 920, 213],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [539, 235, 600, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [539, 235, 400, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'BBBB'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'CCCC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'DDDD'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'EEEE'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'FFFF'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'GGGG'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'HHHH'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'IIII JJJJ'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'KKKK'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'LLLL'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'MMMM'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'NNNN'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [400, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 939, 235],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [-539, 0, 939, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [-531, 8, 923, 219],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [-529, 7, 920, 213],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 400, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 235, 400, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [37, 8, 355, 584],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [39, 7, 352, 563],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAA BBBB CCCC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'DDDD EEEE FFFF'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'GGGG HHHH IIII JJJJ'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'KKKK LLLL MMMM'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'NNNN'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [400, 0, 400, 600],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [437, 8, 355, 584],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [37, 8, 355, 584],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [439, 7, 352, 563],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [39, 7, 352, 563],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAA BBBB CCCC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'DDDD EEEE FFFF'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'GGGG HHHH IIII JJJJ'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'KKKK LLLL MMMM'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'NNNN'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-expected.txt
deleted file mode 100644
index 4581e60..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x73
-  LayoutBlockFlow {HTML} at (0,0) size 800x73
-    LayoutBlockFlow {BODY} at (8,8) size 784x57
-      LayoutBlockFlow {DIV} at (0,0) size 24x57
-        LayoutText {#text} at (0,1) size 24x55
-          text run at (0,1) width 24: "x"
-      LayoutText {#text} at (24,1) size 24x55
-        text run at (24,1) width 24: "y"
-selection start: position 0 of child 0 {#text} of child 0 {DIV} of body
-selection end:   position 1 of child 1 {#text} of body
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png
deleted file mode 100644
index 5060e32..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.txt
deleted file mode 100644
index 26ea4478..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x136
-  LayoutBlockFlow {HTML} at (0,0) size 800x136
-    LayoutBlockFlow {BODY} at (8,16) size 784x112
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 339x19
-          text run at (0,0) width 339: "Passes if there are no overpainted selection highlights."
-      LayoutBlockFlow (anonymous) at (0,36) size 784x76
-        LayoutInline {SPAN} at (0,0) size 189x73
-          LayoutText {#text} at (0,1) size 189x73
-            text run at (0,1) width 96: "text"
-            text run at (96,1) width 93 RTL: "\x{645}\x{62A}\x{646}:"
-        LayoutText {#text} at (0,0) size 0x0
-selection start: position 5 of child 0 {#text} of child 2 {SPAN} of body
-selection end:   position 13 of child 0 {#text} of child 2 {SPAN} of body
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png
deleted file mode 100644
index b3a7049..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.txt
deleted file mode 100644
index 3357200..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x212
-  LayoutBlockFlow {HTML} at (0,0) size 800x212
-    LayoutBlockFlow {BODY} at (8,16) size 784x188
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 339x19
-          text run at (0,0) width 339: "Passes if there are no overpainted selection highlights."
-      LayoutBlockFlow {DIV} at (0,36) size 784x152
-        LayoutText {#text} at (756,1) size 28x73
-          text run at (756,1) width 28: "a"
-        LayoutBR {BR} at (756,1) size 0x73
-        LayoutBR {BR} at (784,77) size 0x73
-selection start: position 0 of child 0 {#text} of child 2 {DIV} of body
-selection end:   position 1 of child 1 {BR} of child 2 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
deleted file mode 100644
index 9309ddb..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
deleted file mode 100644
index 418dfdb..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x38
-  LayoutBlockFlow {HTML} at (0,0) size 800x38
-    LayoutBlockFlow {BODY} at (8,8) size 784x22
-      LayoutTextControl {INPUT} at (0,0) size 154x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
-      LayoutText {#text} at (0,0) size 0x0
-layer at (10,11) size 150x16
-  LayoutBlockFlow {DIV} at (2,3) size 150x16
-    LayoutText {#text} at (0,0) size 71x16
-      text run at (0,0) width 71: "Hello, world!"
-selection start: position 0 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
-selection end:   position 13 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/spellmarkers/inline_spelling_markers-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/spellmarkers/inline_spelling_markers-expected.png
deleted file mode 100644
index 67c1b5e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/disable-spinvalidation/paint/spellmarkers/inline_spelling_markers-expected.png
+++ /dev/null
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
index ba320740..f0d3620c4 100644
--- 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
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png
deleted file mode 100644
index 89432d7..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.txt
deleted file mode 100644
index 1c71be7..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 72, 732, 94],
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 74, 728, 90],
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 82, 712, 74],
-          "reason": "layoutObject removal"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "layoutObject removal"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "layoutObject removal"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "layoutObject removal"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png
deleted file mode 100644
index f8e095e1..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.txt
deleted file mode 100644
index 46881d1..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 72, 732, 94],
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 74, 728, 90],
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [10, 74, 728, 90],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 82, 712, 74],
-          "reason": "layoutObject insertion"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "layoutObject insertion"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "layoutObject insertion"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "layoutObject insertion"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt
deleted file mode 100644
index 929908f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 742],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 742, 785, 99],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-          "rect": [8, 191, 769, 642],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-          "rect": [8, 92, 769, 642],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 92, 769, 99],
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 92, 732, 94],
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 94, 728, 90],
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 102, 712, 74],
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [58, 241, 489, 537],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [58, 142, 489, 537],
-          "reason": "bounds change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "layoutObject removal"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "layoutObject removal"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "layoutObject removal"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-      "reason": "bounds change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "bounds change"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "bounds change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "location change"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "layoutObject removal"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "layoutObject removal"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png
deleted file mode 100644
index 94fef2a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
deleted file mode 100644
index 128d7e4..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-transparent-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-transparent-expected.png
deleted file mode 100644
index 0cea47d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-transparent-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
deleted file mode 100644
index bc549723..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
deleted file mode 100644
index d7a3577..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
deleted file mode 100644
index f42e03499..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png
deleted file mode 100644
index f43b481..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png
deleted file mode 100644
index a5542ba4..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
deleted file mode 100644
index 195d8619..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt
deleted file mode 100644
index af4c52ed..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl (positioned) INPUT id='input'",
-          "rect": [8, 8, 244, 67],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [30, 30, 200, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [30, 30, 46, 23],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl (positioned) INPUT id='input'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'NEW'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt
deleted file mode 100644
index 5c2a3eb..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [9, 84, 198, 14],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 114, 184, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [81, 114, 54, 14],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText (anonymous)",
-          "rect": [9, 84, 53, 14],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText (anonymous)",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'SUCCESS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'SUCCESS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index ab2589a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt
deleted file mode 100644
index a5dd2566..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutButton BUTTON",
-          "rect": [3, 4, 55, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [16, 11, 29, 14],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 11, 29, 13],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutButton BUTTON",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Reset'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index 5d379c3b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
deleted file mode 100644
index 3fae418..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutButton INPUT",
-          "rect": [3, 4, 62, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [16, 11, 36, 14],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 11, 36, 13],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutButton INPUT",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Submit'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
deleted file mode 100644
index 2490106..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTextControl INPUT id='root'",
-      "position": [5, 5],
-      "bounds": [47, 25],
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 47, 25],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 41, 19],
-          "reason": "full"
-        }
-      ]
-    },
-    {
-      "name": "Child Containment Layer",
-      "position": [5, 5],
-      "bounds": [37, 15]
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='inner-editor'",
-      "position": [1, 1],
-      "bounds": [35, 13],
-      "shouldFlattenTransform": false,
-      "drawsContent": true
-    },
-    {
-      "name": "Scrolling Layer",
-      "bounds": [35, 13],
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [63, 13],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [61, 0, 1, 13],
-          "reason": "caret"
-        }
-      ]
-    },
-    {
-      "name": "Overflow Controls Host Layer",
-      "bounds": [35, 13]
-    },
-    {
-      "name": "Horizontal Scrollbar Layer",
-      "position": [0, 13],
-      "bounds": [35, 0],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='root'",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
deleted file mode 100644
index 16332f3a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [12, 45, 113, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [12, 45, 50, 13],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'some text'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/select-option-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/select-option-background-color-expected.txt
deleted file mode 100644
index f7aa4527..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/select-option-background-color-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow OPTION id='option'",
-          "rect": [1, 35, 12, 15],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow OPTION id='option'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png
deleted file mode 100644
index fa266bcb..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png
deleted file mode 100644
index 1be74c4..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
deleted file mode 100644
index a826c0f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 125, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 11, 29, 13],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div'",
-          "rect": [8, 288, 10, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='div'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/svg/use-detach-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/svg/use-detach-expected.png
deleted file mode 100644
index e351886..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/svg/use-detach-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
deleted file mode 100644
index 93ba5edb..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
deleted file mode 100644
index 9ac0c32..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
deleted file mode 100644
index c77cc5a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x35
-  LayoutBlockFlow {HTML} at (0,0) size 800x35
-    LayoutBlockFlow {BODY} at (8,8) size 784x19
-      LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
-      LayoutText {#text} at (0,0) size 0x0
-layer at (11,11) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13
-    LayoutText {#text} at (0,0) size 63x13
-      text run at (0,0) width 63: "Hello, world!"
-selection start: position 0 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
-selection end:   position 13 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
deleted file mode 100644
index 580891d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow-expected.png
deleted file mode 100644
index b9b45e8f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
deleted file mode 100644
index 2d26010..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
deleted file mode 100644
index 1ae5cb4..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
deleted file mode 100644
index c2eadc8..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png
deleted file mode 100644
index 65b42f3c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
deleted file mode 100644
index 36cb408..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index cf36a594..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index 4fb85f27..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
deleted file mode 100644
index 37ff787..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [12, 45, 113, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [12, 45, 51, 13],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'some text'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png
deleted file mode 100644
index f8d1268..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
deleted file mode 100644
index b77f30f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 125, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 11, 28, 13],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div'",
-          "rect": [8, 288, 10, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='div'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
deleted file mode 100644
index c78a22c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
deleted file mode 100644
index e1b66ad2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
deleted file mode 100644
index edb3272..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x35
-  LayoutBlockFlow {HTML} at (0,0) size 800x35
-    LayoutBlockFlow {BODY} at (8,8) size 784x19
-      LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
-      LayoutText {#text} at (0,0) size 0x0
-layer at (11,11) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13
-    LayoutText {#text} at (0,0) size 65x13
-      text run at (0,0) width 65: "Hello, world!"
-selection start: position 0 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
-selection end:   position 13 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-150-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-150-expected.png
deleted file mode 100644
index 49dba773..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-150-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting.https-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting.https-expected.txt
new file mode 100644
index 0000000..d639d286
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting.https-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Verify canvas tainting of fetched image in a Service Worker assert_equals: expected "finish" but got "failure:Result of url:https://web-platform.test:8444/service-workers/service-worker/resources/fetch-access-control.py?PNGIMAGE&mode=cors&url=https%3A%2F%2Fwww1.web-platform.test%3A8444%2Fservice-workers%2Fservice-worker%2Fresources%2Ffetch-access-control.py%3FPNGIMAGE%26ACAOrigin%3Dhttps%3A%2F%2Fweb-platform.test%3A8444  cross_origin: use-credentials must be LOAD_ERROR but NOT_TAINTED"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
deleted file mode 100644
index 042a7ef..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow-expected.png
deleted file mode 100644
index b57a67c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
deleted file mode 100644
index c6f499e..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
deleted file mode 100644
index bf60b1c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
deleted file mode 100644
index 95aedc2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div-expected.png
deleted file mode 100644
index 4116e4f78..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png
deleted file mode 100644
index 1411a75..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
deleted file mode 100644
index 3bac5e1..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt
deleted file mode 100644
index 41e6eca..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [407, 11, 2, 13],
-          "reason": "caret"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [404, 11, 2, 13],
-          "reason": "caret"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.png
deleted file mode 100644
index 74c963d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt
deleted file mode 100644
index 022bcab..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl (positioned) INPUT id='input'",
-          "rect": [8, 8, 244, 67],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [30, 30, 200, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [30, 30, 43, 23],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl (positioned) INPUT id='input'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'NEW'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background-expected.png
deleted file mode 100644
index 39258bdc..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt
deleted file mode 100644
index 6670a29..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [9, 84, 198, 14],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 114, 184, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [84, 114, 48, 14],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText (anonymous)",
-          "rect": [9, 84, 47, 14],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText (anonymous)",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'SUCCESS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'SUCCESS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/details-open-repaint-expected.txt
deleted file mode 100644
index 530071a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/details-open-repaint-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='details-content'",
-          "rect": [8, 68, 784, 19],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTextControl INPUT",
-          "rect": [8, 68, 123, 19],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 71, 117, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutDetailsMarker DIV id='details-marker'",
-          "rect": [8, 53, 11, 11],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutDetailsMarker DIV id='details-marker'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='details-content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTextControl INPUT",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.png
deleted file mode 100644
index 53efe2c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index c1470f6..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index ad2533e6..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
deleted file mode 100644
index 01125c7..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutButton INPUT",
-          "rect": [3, 4, 64, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [16, 11, 38, 14],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 11, 38, 13],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutButton INPUT",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Submit'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
deleted file mode 100644
index b3e9fda..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTextControl INPUT id='root'",
-      "position": [5, 5],
-      "bounds": [54, 25],
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 54, 25],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 48, 19],
-          "reason": "full"
-        }
-      ]
-    },
-    {
-      "name": "Child Containment Layer",
-      "position": [5, 5],
-      "bounds": [44, 15]
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='inner-editor'",
-      "position": [1, 1],
-      "bounds": [42, 13],
-      "shouldFlattenTransform": false,
-      "drawsContent": true
-    },
-    {
-      "name": "Scrolling Layer",
-      "bounds": [42, 13],
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [68, 13],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [66, 0, 1, 13],
-          "reason": "caret"
-        }
-      ]
-    },
-    {
-      "name": "Overflow Controls Host Layer",
-      "bounds": [42, 13]
-    },
-    {
-      "name": "Horizontal Scrollbar Layer",
-      "position": [0, 13],
-      "bounds": [42, 0],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='root'",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt
deleted file mode 100644
index 049aa0d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTextControl INPUT id='root'",
-      "position": [5, 5],
-      "bounds": [54, 25],
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 54, 25],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 48, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [6, 6, 42, 13],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [6, 6, 42, 13],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='root'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'test test test'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt
deleted file mode 100644
index f0b07c5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [416, 23, 356, 548],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame-expected.txt
deleted file mode 100644
index c20cfeb..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [138, 11, 117, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 117, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [138, 11, 40, 13],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 11, 40, 13],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASSED'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASSED'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.png
deleted file mode 100644
index 5429537a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.png
deleted file mode 100644
index b3c80a58..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl-expected.png
deleted file mode 100644
index a0553a3..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
deleted file mode 100644
index 5f441fd..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.txt
deleted file mode 100644
index 5584eca..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {DIV} at (0,0) size 784x19
-        LayoutTextControl {INPUT} at (0,0) size 123x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow (anonymous) at (0,19) size 784x18
-        LayoutText {#text} at (0,0) size 4x18
-          text run at (0,0) width 4: " "
-      LayoutBlockFlow {DIV} at (0,37) size 784x0
-layer at (11,11) size 117x13
-  LayoutBlockFlow {DIV} at (3,3) size 117x13
-caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png
deleted file mode 100644
index 0b24d14b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
deleted file mode 100644
index 2a57678..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [12, 45, 105, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [12, 45, 54, 13],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'some text'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt
deleted file mode 100644
index e4815bf..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='target'",
-          "rect": [5, 5, 54, 25],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 42, 13],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 11, 42, 13],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutTextControl INPUT id='target'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'test test test'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics-expected.txt
deleted file mode 100644
index a9b337a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='stacked'",
-          "rect": [19, 159, 200, 41],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [19, 153, 131, 47],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='stacked'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png
deleted file mode 100644
index 4aac75a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
deleted file mode 100644
index 06a9d36..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 117, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 11, 26, 13],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div'",
-          "rect": [8, 288, 10, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='div'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
deleted file mode 100644
index f066428e..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.png
deleted file mode 100644
index 744ffd4b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
deleted file mode 100644
index a47b535f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.txt
deleted file mode 100644
index 03ffb43..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [5, 5, 167, 38],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 155, 13],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [9, 24, 144, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [9, 11, 144, 13],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [153, 24, 15, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [153, 9, 15, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl TEXTAREA id='editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTextControl TEXTAREA id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutTextControl TEXTAREA id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox '------------------------------------------------------------'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
deleted file mode 100644
index a1dcf3bd..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
deleted file mode 100644
index e5b72cb0..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x35
-  LayoutBlockFlow {HTML} at (0,0) size 800x35
-    LayoutBlockFlow {BODY} at (8,8) size 784x19
-      LayoutTextControl {INPUT} at (0,0) size 123x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
-      LayoutText {#text} at (0,0) size 0x0
-layer at (11,11) size 117x13
-  LayoutBlockFlow {DIV} at (3,3) size 117x13
-    LayoutText {#text} at (0,0) size 68x13
-      text run at (0,0) width 68: "Hello, world!"
-selection start: position 0 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
-selection end:   position 13 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background-expected.png
deleted file mode 100644
index 39258bdc..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
deleted file mode 100644
index 580891d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow-expected.png
deleted file mode 100644
index b9b45e8f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
deleted file mode 100644
index 2d26010..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
deleted file mode 100644
index e5c4dd7..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
deleted file mode 100644
index c2eadc8..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png
deleted file mode 100644
index 65b42f3c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
deleted file mode 100644
index 36cb408..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index cf36a594..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index 4fb85f27..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
deleted file mode 100644
index 37ff787..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [12, 45, 113, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [12, 45, 51, 13],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'some text'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png
deleted file mode 100644
index f8d1268..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
deleted file mode 100644
index b77f30f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 125, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 11, 28, 13],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div'",
-          "rect": [8, 288, 10, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='div'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
deleted file mode 100644
index c78a22c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
deleted file mode 100644
index e1b66ad2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
deleted file mode 100644
index edb3272..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x35
-  LayoutBlockFlow {HTML} at (0,0) size 800x35
-    LayoutBlockFlow {BODY} at (8,8) size 784x19
-      LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
-      LayoutText {#text} at (0,0) size 0x0
-layer at (11,11) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13
-    LayoutText {#text} at (0,0) size 65x13
-      text run at (0,0) width 65: "Hello, world!"
-selection start: position 0 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
-selection end:   position 13 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-150-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-150-expected.png
deleted file mode 100644
index 49dba773..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-150-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting.https-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting.https-expected.txt
new file mode 100644
index 0000000..d639d286
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting.https-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Verify canvas tainting of fetched image in a Service Worker assert_equals: expected "finish" but got "failure:Result of url:https://web-platform.test:8444/service-workers/service-worker/resources/fetch-access-control.py?PNGIMAGE&mode=cors&url=https%3A%2F%2Fwww1.web-platform.test%3A8444%2Fservice-workers%2Fservice-worker%2Fresources%2Ffetch-access-control.py%3FPNGIMAGE%26ACAOrigin%3Dhttps%3A%2F%2Fweb-platform.test%3A8444  cross_origin: use-credentials must be LOAD_ERROR but NOT_TAINTED"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/masks/mask-with-removed-filters-expected.png b/third_party/WebKit/LayoutTests/platform/mac/compositing/masks/mask-with-removed-filters-expected.png
index 5b568110..0481bdbb 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/masks/mask-with-removed-filters-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/masks/mask-with-removed-filters-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/tiled-mask-expected.png b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/tiled-mask-expected.png
index ba320740..f0d3620c4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/tiled-mask-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/tiled-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/text-on-scaled-surface-expected.png b/third_party/WebKit/LayoutTests/platform/mac/compositing/text-on-scaled-surface-expected.png
new file mode 100644
index 0000000..94cb2fbf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/text-on-scaled-surface-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-mask-video-ratio-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-mask-video-ratio-expected.png
index 7c9dd39..0ac166cc 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-mask-video-ratio-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-mask-video-ratio-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-mask-video-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-mask-video-shadow-expected.png
index 34365e4d..a064404 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-mask-video-shadow-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/border-radius-mask-video-shadow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/backface-visibility/backface-visibility-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/backface-visibility/backface-visibility-image-expected.png
deleted file mode 100644
index 5aa43460..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/backface-visibility/backface-visibility-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/color-matching/image-color-matching-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/color-matching/image-color-matching-expected.png
deleted file mode 100644
index 46ef26a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/color-matching/image-color-matching-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/culling/scrolled-within-boxshadow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/culling/scrolled-within-boxshadow-expected.png
deleted file mode 100644
index 1772f0c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/culling/scrolled-within-boxshadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/culling/translated-boxshadow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/culling/translated-boxshadow-expected.png
deleted file mode 100644
index 5ce3c41..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/culling/translated-boxshadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/culling/unscrolled-within-boxshadow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/culling/unscrolled-within-boxshadow-expected.png
deleted file mode 100644
index 1772f0c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/culling/unscrolled-within-boxshadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.png
deleted file mode 100644
index 5f3772f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/geometry/clipping-foreground-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/geometry/clipping-foreground-expected.txt
deleted file mode 100644
index 6b2679d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/geometry/clipping-foreground-expected.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x18
-        LayoutText {#text} at (0,0) size 442x18
-          text run at (0,0) width 442: "The layering of the boxes should not be affected by overflow:hidden."
-      LayoutBlockFlow (anonymous) at (0,34) size 784x479
-        LayoutText {#text} at (320,306) size 4x18
-          text run at (320,306) width 4: " "
-        LayoutText {#text} at (0,0) size 0x0
-layer at (68,261) size 200x200 layerType: background only
-layer at (28,221) size 150x150
-  LayoutBlockFlow (positioned) zI: -1 {DIV} at (-40,-40) size 150x150 [color=#808080] [bgcolor=#C86464] [border: (2px solid #000000)]
-    LayoutText zI: -1 {#text} at (22,22) size 108x40
-      text run at (22,22) width 108: "Behind"
-layer at (50,303) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (22,82) size 100x100 [bgcolor=#008000] [border: (2px solid #000000)]
-    LayoutText {#text} at (22,22) size 54x40
-      text run at (22,22) width 54: "Behind"
-      text run at (22,42) width 52: "behind"
-layer at (68,261) size 200x200 layerType: foreground only
-  LayoutBlockFlow (relative positioned) {DIV} at (60,219) size 200x200 [color=#0000FF] [bgcolor=#FFFFFFCC] [border: (10px solid #000000)]
-    LayoutText {#text} at (30,30) size 126x80
-      text run at (30,30) width 59: "Box"
-      text run at (30,70) width 126: "contents"
-layer at (158,351) size 150x150
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (90,90) size 150x150 [color=#808080] [bgcolor=#C8C880] [border: (2px solid #000000)]
-    LayoutText zI: 1 {#text} at (22,22) size 86x80
-      text run at (22,22) width 34: "In"
-      text run at (22,62) width 86: "Front"
-layer at (392,102) size 200x200 clip at (402,112) size 180x180 scrollWidth 230 scrollHeight 230 layerType: background only
-layer at (352,62) size 150x150 backgroundClip at (402,112) size 180x180 clip at (402,112) size 180x180
-  LayoutBlockFlow (positioned) zI: -1 {DIV} at (-40,-40) size 150x150 [color=#808080] [bgcolor=#C86464] [border: (2px solid #000000)]
-    LayoutText zI: -1 {#text} at (22,22) size 108x40
-      text run at (22,22) width 108: "Behind"
-layer at (374,144) size 100x100 backgroundClip at (402,112) size 180x180 clip at (402,112) size 180x180
-  LayoutBlockFlow (positioned) {DIV} at (22,82) size 100x100 [bgcolor=#008000] [border: (2px solid #000000)]
-    LayoutText {#text} at (22,22) size 54x40
-      text run at (22,22) width 54: "Behind"
-      text run at (22,42) width 52: "behind"
-layer at (392,102) size 200x200 clip at (402,112) size 180x180 scrollWidth 230 scrollHeight 230 layerType: foreground only
-  LayoutBlockFlow (relative positioned) {DIV} at (384,60) size 200x200 [color=#0000FF] [bgcolor=#FFFFFFCC] [border: (10px solid #000000)]
-    LayoutText {#text} at (30,30) size 126x80
-      text run at (30,30) width 59: "Box"
-      text run at (30,70) width 126: "contents"
-layer at (482,192) size 150x150 backgroundClip at (402,112) size 180x180 clip at (402,112) size 180x180
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (90,90) size 150x150 [color=#808080] [bgcolor=#C8C880] [border: (2px solid #000000)]
-    LayoutText zI: 1 {#text} at (22,22) size 86x80
-      text run at (22,22) width 34: "In"
-      text run at (22,62) width 86: "Front"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/geometry/video-fixed-scrolling-expected.png
deleted file mode 100644
index 663a5575..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/geometry/video-fixed-scrolling-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/geometry/video-opacity-overlay-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/geometry/video-opacity-overlay-expected.png
deleted file mode 100644
index 31ef35b1..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/geometry/video-opacity-overlay-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png
deleted file mode 100644
index 75f290f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
deleted file mode 100644
index e56d7700..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-transparent-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-transparent-expected.png
deleted file mode 100644
index a7f6587d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-transparent-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-skew-matrix-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-skew-matrix-expected.png
deleted file mode 100644
index 8a9e6c7..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-skew-matrix-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow-expected.png
deleted file mode 100644
index 12e044e..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-squashing-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-squashing-expected.png
deleted file mode 100644
index b8c2c24..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-squashing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-alignment-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-alignment-expected.txt
deleted file mode 100644
index 95dd0d19..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-alignment-expected.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x70
-  LayoutBlockFlow {HTML} at (0,0) size 800x70
-    LayoutBlockFlow {BODY} at (8,8) size 784x54
-      LayoutText {#text} at (0,0) size 783x36
-        text run at (0,0) width 605: "Simple test of composited iframe content. There should be a blue box with a gray background "
-        text run at (604,0) width 179: "inside the black border. The"
-        text run at (0,18) width 391: "gray background should fit perfectly within the block border "
-        text run at (390,18) width 91: "with no gaps. "
-      LayoutBR {BR} at (0,0) size 0x0
-      LayoutBR {BR} at (0,36) size 0x18
-layer at (100,100) size 440x340
-  LayoutIFrame (positioned) {IFRAME} at (100,100) size 440x340 [border: (20px solid #000000)]
-    layer at (0,0) size 400x300
-      LayoutView at (0,0) size 400x300
-    layer at (0,0) size 400x230
-      LayoutBlockFlow {HTML} at (0,0) size 400x230
-        LayoutBlockFlow {BODY} at (8,10) size 384x210 [bgcolor=#C0C0C0]
-    layer at (18,10) size 210x210
-      LayoutBlockFlow {DIV} at (10,0) size 210x210 [bgcolor=#0000FF]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/layers-inside-overflow-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/layers-inside-overflow-scroll-expected.png
deleted file mode 100644
index 7cef7c3..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/layers-inside-overflow-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/lots-of-img-layers-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/lots-of-img-layers-expected.png
deleted file mode 100644
index 1d5e388..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/lots-of-img-layers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/lots-of-img-layers-with-opacity-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/lots-of-img-layers-with-opacity-expected.png
deleted file mode 100644
index 504660f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/lots-of-img-layers-with-opacity-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/masks/direct-image-mask-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/masks/direct-image-mask-expected.png
deleted file mode 100644
index 2a47f72..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/masks/direct-image-mask-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/masks/mask-with-removed-filters-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/masks/mask-with-removed-filters-expected.png
new file mode 100644
index 0000000..0481bdbb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/masks/mask-with-removed-filters-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/border-radius-styles-with-composited-child-expected.png
deleted file mode 100644
index 5cf728d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/border-radius-styles-with-composited-child-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/clip-parent-reset-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/clip-parent-reset-expected.txt
deleted file mode 100644
index d55ca74..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/clip-parent-reset-expected.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x184
-  LayoutBlockFlow {HTML} at (0,0) size 800x184
-    LayoutBlockFlow {BODY} at (8,8) size 784x168
-      LayoutBlockFlow (anonymous) at (0,150) size 784x18
-        LayoutText {#text} at (0,0) size 639x18
-          text run at (0,0) width 639: "This test verifies the clip parent of a layer gets correctly reset when it gained a non-composited clip."
-layer at (8,8) size 150x150 transparent
-  LayoutBlockFlow {DIV} at (0,0) size 150x150 [bgcolor=#FF0000]
-layer at (8,8) size 100x100 scrollWidth 200 scrollHeight 200
-  LayoutBlockFlow {DIV} at (0,0) size 100x100
-layer at (8,8) size 200x200 backgroundClip at (8,8) size 100x100 clip at (8,8) size 100x100
-  LayoutBlockFlow {DIV} at (0,0) size 200x200 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
deleted file mode 100644
index e586fb1..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/overflow-compositing-descendant-expected.png
deleted file mode 100644
index 516ff60..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/overflow-compositing-descendant-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/scroll-ancestor-update-expected.png
deleted file mode 100644
index a3d77e0..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/scroll-ancestor-update-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/scrollbar-layer-placement-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/scrollbar-layer-placement-expected.png
deleted file mode 100644
index 2625ea2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/scrollbar-layer-placement-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow-expected.png
deleted file mode 100644
index bb32dcb..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/theme-affects-visual-overflow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/tiled-mask-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/tiled-mask-expected.png
new file mode 100644
index 0000000..f0d3620c4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/tiled-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
deleted file mode 100644
index 40840209..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/reflections/load-video-in-reflection-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/reflections/load-video-in-reflection-expected.png
deleted file mode 100644
index 8426d61..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/reflections/load-video-in-reflection-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
deleted file mode 100644
index bf60b1c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
deleted file mode 100644
index 95aedc2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/reflections/simple-composited-reflections-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/reflections/simple-composited-reflections-expected.png
deleted file mode 100644
index 9053b6d6..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/reflections/simple-composited-reflections-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/self-painting-layers-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/self-painting-layers-expected.png
deleted file mode 100644
index 2abf9de..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/self-painting-layers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png
deleted file mode 100644
index 74b946f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/squashing/selection-repaint-with-gaps-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/squashing/selection-repaint-with-gaps-expected.txt
deleted file mode 100644
index 9d822583..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/squashing/selection-repaint-with-gaps-expected.txt
+++ /dev/null
@@ -1,135 +0,0 @@
-lorem ipsumlorem ipsumlorem ipsum
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='overlap'",
-      "position": [8, 8],
-      "bounds": [300, 500]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='item')",
-      "position": [15, 35],
-      "bounds": [100, 210],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 80, 42, 36],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='inline-block'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ipsum'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='overlap'",
-      "position": [8, 8],
-      "bounds": [300, 500]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='item')",
-      "position": [15, 35],
-      "bounds": [100, 210],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 80, 44, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 160, 42, 36],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='inline-block'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ipsum'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='item2' class='item'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='inline-block'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ipsum'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/text-on-scaled-surface-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/text-on-scaled-surface-expected.png
new file mode 100644
index 0000000..94cb2fbf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/text-on-scaled-surface-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/video-frame-size-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/video-frame-size-change-expected.txt
deleted file mode 100644
index db2f0421..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/video-frame-size-change-expected.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x242
-  LayoutBlockFlow {HTML} at (0,0) size 800x242
-    LayoutBlockFlow {BODY} at (8,16) size 784x218
-      LayoutBlockFlow {P} at (0,0) size 784x18
-        LayoutText {#text} at (0,0) size 493x18
-          text run at (0,0) width 493: "Tests decoding and rendering a video element that has a changing resolution."
-      LayoutBlockFlow (anonymous) at (0,34) size 784x184
-        LayoutText {#text} at (320,166) size 4x18
-          text run at (320,166) width 4: " "
-        LayoutText {#text} at (0,0) size 0x0
-layer at (8,50) size 320x180
-  LayoutVideo {VIDEO} at (0,0) size 320x180
-layer at (332,50) size 320x180
-  LayoutVideo {VIDEO} at (324,0) size 320x180
-layer at (8,50) size 320x180
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x180
-    LayoutBlockFlow {DIV} at (0,148) size 320x32
-layer at (8,50) size 320x138
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x138
-layer at (332,50) size 320x180
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x180
-    LayoutBlockFlow {DIV} at (0,148) size 320x32
-layer at (332,50) size 320x138
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x138
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/visibility/visibility-image-layers-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/visibility/visibility-image-layers-expected.png
deleted file mode 100644
index 9fdd267..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/visibility/visibility-image-layers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/visibility/visibility-simple-video-layer-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/visibility/visibility-simple-video-layer-expected.png
deleted file mode 100644
index 5f8d36aec..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/visibility/visibility-simple-video-layer-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/webgl/webgl-nonpremultiplied-blend-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/webgl/webgl-nonpremultiplied-blend-expected.txt
deleted file mode 100644
index e636f6a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/compositing/webgl/webgl-nonpremultiplied-blend-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x260
-  LayoutBlockFlow {HTML} at (0,0) size 800x260
-    LayoutBlockFlow {BODY} at (8,8) size 784x244
-      LayoutText {#text} at (240,226) size 4x18
-        text run at (240,226) width 4: " "
-      LayoutText {#text} at (0,0) size 0x0
-layer at (28,28) size 200x200
-  LayoutHTMLCanvas {CANVAS} at (20,20) size 200x200 [bgcolor=#00008000]
-layer at (272,28) size 200x200
-  LayoutHTMLCanvas {CANVAS} at (264,20) size 200x200 [bgcolor=#00008000]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.png
deleted file mode 100644
index ba620ef0..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.txt
deleted file mode 100644
index f3a86e58..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [3, 37, 794, 64],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='div'",
-          "rect": [8, 78, 784, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='div'",
-          "rect": [8, 60, 1, 18],
-          "reason": "caret"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='div'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt
deleted file mode 100644
index 37c76b3..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [1250, 585],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='shiftMe'",
-          "rect": [0, 0, 1500, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='shiftMe'",
-          "rect": [-250, 0, 1500, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
-          "rect": [704, 0, 700, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
-          "rect": [454, 0, 700, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
-          "rect": [0, 0, 700, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
-          "rect": [-250, 0, 700, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [1250, 0, 250, 585],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [704, 0, 214, 232],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [454, 0, 214, 232],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [0, 0, 214, 232],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [-250, 0, 214, 232],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [700, 218, 4, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [450, 218, 4, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='shiftMe'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div-expected.png
deleted file mode 100644
index c16b0de5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-small-document-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-small-document-expected.png
deleted file mode 100644
index 608f01c4..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-small-document-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/backgroundSizeRepaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/backgroundSizeRepaint-expected.txt
deleted file mode 100644
index c7ec4df..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/backgroundSizeRepaint-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 329, 200, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 169, 200, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='b'",
-          "rect": [29, 369, 180, 20],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='a'",
-          "rect": [29, 209, 180, 20],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='a'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='b'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt
deleted file mode 100644
index 375c2a2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (floating) SPAN",
-          "rect": [305, 35, 296, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [305, 35, 296, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) SPAN",
-          "rect": [153, 35, 296, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [153, 35, 296, 18],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) SPAN",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) SPAN",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/block-no-inflow-children-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/block-no-inflow-children-expected.txt
deleted file mode 100644
index 7d04804..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/block-no-inflow-children-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [0, 0, 64, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 0, 64, 18],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'La la la la'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/block-selection-gap-stale-cache-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/block-selection-gap-stale-cache-expected.txt
deleted file mode 100644
index 6e335035..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/block-selection-gap-stale-cache-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {DIV} at (0,0) size 784x100
-        LayoutBlockFlow {DIV} at (0,0) size 100x100
-        LayoutBR {BR} at (100,100) size 0x0
-      LayoutBlockFlow (anonymous) at (0,100) size 784x18
-        LayoutText {#text} at (0,0) size 4x18
-          text run at (0,0) width 4: " "
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/border-radius-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/border-radius-repaint-expected.txt
deleted file mode 100644
index c3ec47f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/border-radius-repaint-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 239, 200, 88],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 79, 200, 88],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='b'",
-          "rect": [33, 293, 172, 20],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='a'",
-          "rect": [33, 133, 172, 20],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='a'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='b'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/box-inline-resize-expected.txt
deleted file mode 100644
index 5a6f239..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/box-inline-resize-expected.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow H2",
-          "rect": [40, 103, 113, 29],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [40, 103, 113, 29],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow H2",
-          "rect": [8, 103, 113, 29],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 103, 113, 29],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 84, 32, 68],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG id='foo'",
-          "rect": [8, 84, 32, 32],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG id='foo'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow H2",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Chromium'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/box-shadow-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/box-shadow-dynamic-expected.txt
deleted file mode 100644
index 0f9972af..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/box-shadow-dynamic-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [18, 70, 55, 75],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [18, 190, 55, 55],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-3509-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-3509-expected.txt
deleted file mode 100644
index bd92e0f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-3509-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='im'",
-          "rect": [11, 125, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 125, 4, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='im'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-5699-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-5699-expected.txt
deleted file mode 100644
index c156eb4..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-5699-expected.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 130, 784, 66],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 178, 36, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 148, 36, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='d'",
-          "rect": [8, 145, 4, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 145, 4, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 130, 4, 18],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='d'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Hello'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6278-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6278-expected.txt
deleted file mode 100644
index 12d1a1e..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6278-expected.txt
+++ /dev/null
@@ -1,124 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [10, 132, 292, 144],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [10, 281, 292, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 132, 276, 144],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [10, 132, 242, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [10, 317, 242, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='col1'",
-          "rect": [10, 331, 242, 36],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 132, 240, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='target'",
-          "rect": [254, 132, 52, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='col1'",
-          "rect": [252, 132, 50, 199],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD id='col1'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Curabitur pretium, quam quis semper'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'malesuada, est libero feugiat libero,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'vel fringilla orci nibh sed neque.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Quisque eu nulla non nisi molestie'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'accumsan. Etiam tellus urna, laoreet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ac, laoreet non, suscipit sed, sapien.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Phasellus vehicula, sem at posuere'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'vehicula, augue nibh molestie nisl,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'nec ullamcorper lacus ante vulputate'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'pede.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD id='target'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6388-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6388-expected.txt
deleted file mode 100644
index a28c1a4b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6388-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [8, 130, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 130, 100, 100],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6473-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6473-expected.txt
deleted file mode 100644
index 17e05d7..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6473-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='allcontent'",
-          "rect": [8, 130, 784, 50],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) P",
-          "rect": [8, 146, 784, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) P",
-          "rect": [8, 130, 784, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 146, 70, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 130, 70, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='allcontent'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'SUCCESS'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.png
deleted file mode 100644
index d33dc55..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.txt
deleted file mode 100644
index 3fecbfe..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 148, 784, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='t'",
-          "rect": [8, 166, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='p'",
-          "rect": [8, 148, 4, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 148, 4, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN id='p'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='t'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png
deleted file mode 100644
index f7c30f9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/button-checkbox-click-method-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-expected.png
deleted file mode 100644
index 2617d24..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-no-full-invalidation-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-no-full-invalidation-expected.png
deleted file mode 100644
index 4359ac3..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-no-full-invalidation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.png
deleted file mode 100644
index 5674348..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.txt
deleted file mode 100644
index bae6e26..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [3, 39, 794, 28],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [3, 39, 794, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [3, 39, 794, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [3, 39, 794, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 44, 23, 18],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 44, 16, 18],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [30, 44, 9, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [23, 44, 9, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [23, 44, 9, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [15, 44, 9, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [15, 44, 9, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 44, 8, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [8, 44, 8, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='editor'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'a'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'ab'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'abc'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
deleted file mode 100644
index 8fbbd80..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt
deleted file mode 100644
index cc332d1..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [407, 11, 2, 13],
-          "reason": "caret"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [405, 11, 2, 13],
-          "reason": "caret"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-outside-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-outside-block-expected.txt
deleted file mode 100644
index 12a8fe8..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-outside-block-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [791, 8, 1, 18],
-          "reason": "caret"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-subpixel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-subpixel-expected.txt
deleted file mode 100644
index 05c1760..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-subpixel-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='target'",
-          "rect": [8, 8, 225, 19],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 201, 13],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='target'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.png
deleted file mode 100644
index cacf24b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.txt
deleted file mode 100644
index 69ee0c96f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='scroller'",
-      "position": [8, 44],
-      "bounds": [100, 100],
-      "shouldFlattenTransform": false,
-      "drawsContent": true
-    },
-    {
-      "name": "Scrolling Layer",
-      "bounds": [100, 100],
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [205, 1019],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='text'",
-          "rect": [-3, 997, 211, 25],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [3, 1003, 200, 13],
-          "reason": "subtree"
-        }
-      ]
-    },
-    {
-      "name": "Overflow Controls Host Layer",
-      "bounds": [100, 100]
-    },
-    {
-      "name": "Horizontal Scrollbar Layer",
-      "position": [0, 100],
-      "bounds": [100, 0],
-      "drawsContent": true
-    },
-    {
-      "name": "Vertical Scrollbar Layer",
-      "position": [100, 0],
-      "bounds": [0, 100],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='text'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.png
deleted file mode 100644
index 7be3536..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.txt
deleted file mode 100644
index 56b54e8..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='div'",
-          "rect": [345, 211, 11, 17],
-          "reason": "caret"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='div'",
-          "rect": [42, 36, 11, 17],
-          "reason": "caret"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt
deleted file mode 100644
index 2638cda..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl (positioned) INPUT id='input'",
-          "rect": [8, 8, 244, 67],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [30, 30, 200, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [30, 30, 44, 23],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl (positioned) INPUT id='input'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'NEW'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/clip-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/clip-with-layout-delta-expected.txt
deleted file mode 100644
index db15dc3..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/clip-with-layout-delta-expected.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV",
-          "rect": [108, 8, 100, 100],
-          "reason": "background"
-        },
-        {
-          "object": "LayoutBlockFlow SPAN id='t2' class='blue'",
-          "rect": [108, 8, 100, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 8, 100, 100],
-          "reason": "background"
-        },
-        {
-          "object": "LayoutBlockFlow SPAN id='t1'",
-          "rect": [8, 8, 100, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [108, 8, 4, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 4, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "background"
-    },
-    {
-      "object": "LayoutBlockFlow SPAN id='t1'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV",
-      "reason": "background"
-    },
-    {
-      "object": "LayoutBlockFlow SPAN id='t2' class='blue'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/clipped-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/clipped-relative-expected.txt
deleted file mode 100644
index d79b913..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/clipped-relative-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='inner'",
-          "rect": [8, 70, 204, 232],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [8, 70, 204, 232],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='inner'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background-expected.png
deleted file mode 100644
index 21b0b3d9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.txt
deleted file mode 100644
index bb881861..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableRow TR",
-      "position": [8, 8],
-      "transformOrigin": [37.5, 10.5],
-      "bounds": [76, 22],
-      "drawsContent": true,
-      "backgroundColor": "#FF0000",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell TD id='target'",
-          "rect": [0, 0, 38, 21],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
deleted file mode 100644
index b857cab..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt
deleted file mode 100644
index 038fc3e..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-Hi!
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 4021],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-          "rect": [425, 980, 360, 90],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-          "rect": [425, 980, 360, 90],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-          "rect": [425, 480, 360, 90],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-          "rect": [425, 480, 360, 90],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [425, 980, 22, 18],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [425, 980, 22, 18],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [425, 480, 22, 18],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [425, 480, 22, 18],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Hi!'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Hi!'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
deleted file mode 100644
index 08da9ec..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 1016],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='foo'",
-      "position": [8, 8],
-      "bounds": [200, 1000],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#D3D3D3"
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
-      "position": [8, 0],
-      "bounds": [300, 654],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 500, 300, 150],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 508, 284, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 508, 269, 142],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 508, 31, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [285, 500, 15, 150],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'test1'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/page-scale-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/page-scale-repaint-expected.png
deleted file mode 100644
index 5b9106a8c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/page-scale-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt
deleted file mode 100644
index 3ed5b0bd..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt
+++ /dev/null
@@ -1,112 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [1418, 1008],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "rect": [8, 8, 769, 108],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 116, 769, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 62, 769, 54],
-          "reason": "geometry"
-        }
-      ]
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV",
-      "position": [8, 8],
-      "bounds": [1000, 1000]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='mv-tile')",
-      "position": [8, 8],
-      "bounds": [1000, 104],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-          "rect": [0, 108, 1000, 50],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-          "rect": [0, 54, 1000, 50],
-          "reason": "compositing update"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-          "rect": [0, 54, 100, 50],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-          "rect": [0, 0, 100, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='foo' class='mv-tile'",
-          "rect": [0, 0, 100, 50],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='foo' class='mv-tile'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-      "reason": "compositing update"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt
deleted file mode 100644
index ac49867..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [9, 84, 198, 14],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 114, 184, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [82, 114, 52, 14],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText (anonymous)",
-          "rect": [9, 84, 52, 14],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText (anonymous)",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'SUCCESS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'SUCCESS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-2-expected.txt
deleted file mode 100644
index 42f5fdf1..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-2-expected.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='keep' class='item'",
-          "rect": [348, 84, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
-          "rect": [348, 84, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='keep' class='item'",
-          "rect": [88, 84, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='keep' class='item'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-3-expected.txt
deleted file mode 100644
index c554953..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-3-expected.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='keep_child'",
-          "rect": [508, 204, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='remove_child'",
-          "rect": [508, 84, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='keep_child'",
-          "rect": [408, 204, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='remove_child'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='remove' class='outer'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='keep_inner'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='abs_pos'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='keep_child'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-4-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-4-expected.txt
deleted file mode 100644
index ce84f18..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-4-expected.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='keep' class='item'",
-          "rect": [408, 84, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
-          "rect": [408, 84, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='keep' class='item'",
-          "rect": [208, 84, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [408, 84, 4, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [408, 84, 4, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [208, 84, 4, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='node' class='outer'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='keep' class='item'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-expected.txt
deleted file mode 100644
index 36328e12..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-expected.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='keep' class='item'",
-          "rect": [348, 84, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
-          "rect": [348, 84, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='keep' class='item'",
-          "rect": [88, 84, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [348, 84, 4, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [348, 84, 4, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [88, 84, 4, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='keep' class='item'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.png
deleted file mode 100644
index 2de9ffa..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.txt
deleted file mode 100644
index d1da7e2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.txt
+++ /dev/null
@@ -1,115 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='two'",
-          "rect": [8, 137, 784, 37],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 155, 784, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 137, 784, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='one'",
-          "rect": [8, 119, 784, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 155, 32, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 119, 32, 19],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 137, 28, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 119, 28, 19],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='two'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='one'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'three'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/details-open-repaint-expected.txt
deleted file mode 100644
index 7a1cade..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/details-open-repaint-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='details-content'",
-          "rect": [8, 68, 784, 19],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTextControl INPUT",
-          "rect": [8, 68, 131, 19],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 71, 125, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutDetailsMarker DIV id='details-marker'",
-          "rect": [8, 53, 11, 11],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutDetailsMarker DIV id='details-marker'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='details-content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTextControl INPUT",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt
deleted file mode 100644
index 733955dc..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [808, 585],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [10, 73, 102, 99],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [12, 70, 100, 102],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='target'",
-          "rect": [11, 71, 100, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [114, 70, 2, 102],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [14, 70, 2, 3],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.png
deleted file mode 100644
index c42d6c2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-expected.txt
deleted file mode 100644
index 57f2eeb..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-expected.txt
+++ /dev/null
@@ -1,179 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='content'",
-          "rect": [138, 116, 654, 90],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [138, 116, 654, 90],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [138, 116, 652, 90],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='content'",
-          "rect": [148, 116, 644, 108],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='content'",
-          "rect": [148, 116, 644, 108],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [148, 116, 644, 108],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [148, 116, 644, 108],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [148, 116, 632, 108],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [148, 116, 632, 108],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='content'",
-          "rect": [400, 116, 392, 162],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [400, 116, 392, 162],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='left'",
-          "rect": [8, 224, 392, 54],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [400, 116, 391, 162],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='left'",
-          "rect": [148, 116, 252, 162],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='left'",
-          "rect": [8, 206, 140, 18],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='left'",
-          "rect": [138, 116, 10, 108],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='left'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='content'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'aliquet. Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'feugiat vehicula. Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'condimentum leo neque sed nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'id, faucibus id quam.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='left'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='content'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexbox/scrollbars-changed-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexbox/scrollbars-changed-expected.txt
deleted file mode 100644
index 7f2b3e9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexbox/scrollbars-changed-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='dynamic' class='content'",
-          "rect": [0, 0, 185, 30],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='scroller'",
-          "rect": [185, 0, 15, 100],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 4, 15, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 4, 15, 17],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='dynamic' class='content'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'z'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.png
deleted file mode 100644
index 39c8e64..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.txt
deleted file mode 100644
index 4455153..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x552
-      LayoutBlockFlow {P} at (0,0) size 784x36
-        LayoutText {#text} at (0,0) size 233x18
-          text run at (0,0) width 233: "This is a test for regressions against "
-        LayoutInline {I} at (0,0) size 777x36
-          LayoutInline {A} at (0,0) size 354x18 [color=#0000EE]
-            LayoutText {#text} at (232,0) size 354x18
-              text run at (232,0) width 354: "http://bugzilla.opendarwin.org/show_bug.cgi?id=8056"
-          LayoutText {#text} at (585,0) size 777x36
-            text run at (585,0) width 5: " "
-            text run at (589,0) width 188: "Flexible boxes do not repaint"
-            text run at (0,18) width 243: "their top, left and children's overflows"
-        LayoutText {#text} at (242,18) size 5x18
-          text run at (242,18) width 5: "."
-      LayoutBlockFlow {DIV} at (0,62) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-            LayoutText {#text} at (1,1) size 182x18
-              text run at (1,1) width 182: "Lorem ipsum dolor sit amet."
-      LayoutBlockFlow {DIV} at (0,182) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-      LayoutBlockFlow {DIV} at (0,302) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-      LayoutBlockFlow {DIV} at (0,422) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-            LayoutText {#text} at (1,1) size 95x144
-              text run at (1,1) width 86: "Lorem ipsum"
-              text run at (1,19) width 92: "dolor sit amet,"
-              text run at (1,37) width 80: "consectetuer"
-              text run at (1,55) width 95: "adipiscing elit."
-              text run at (1,73) width 54: "Etiam et"
-              text run at (1,91) width 79: "ipsum. Nam"
-              text run at (1,109) width 80: "consectetuer"
-              text run at (1,127) width 84: "mi eget velit."
-layer at (8,60) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,52) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.png
deleted file mode 100644
index 39c8e64..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.txt
deleted file mode 100644
index 4455153..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x552
-      LayoutBlockFlow {P} at (0,0) size 784x36
-        LayoutText {#text} at (0,0) size 233x18
-          text run at (0,0) width 233: "This is a test for regressions against "
-        LayoutInline {I} at (0,0) size 777x36
-          LayoutInline {A} at (0,0) size 354x18 [color=#0000EE]
-            LayoutText {#text} at (232,0) size 354x18
-              text run at (232,0) width 354: "http://bugzilla.opendarwin.org/show_bug.cgi?id=8056"
-          LayoutText {#text} at (585,0) size 777x36
-            text run at (585,0) width 5: " "
-            text run at (589,0) width 188: "Flexible boxes do not repaint"
-            text run at (0,18) width 243: "their top, left and children's overflows"
-        LayoutText {#text} at (242,18) size 5x18
-          text run at (242,18) width 5: "."
-      LayoutBlockFlow {DIV} at (0,62) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-            LayoutText {#text} at (1,1) size 182x18
-              text run at (1,1) width 182: "Lorem ipsum dolor sit amet."
-      LayoutBlockFlow {DIV} at (0,182) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-      LayoutBlockFlow {DIV} at (0,302) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-      LayoutBlockFlow {DIV} at (0,422) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-            LayoutText {#text} at (1,1) size 95x144
-              text run at (1,1) width 86: "Lorem ipsum"
-              text run at (1,19) width 92: "dolor sit amet,"
-              text run at (1,37) width 80: "consectetuer"
-              text run at (1,55) width 95: "adipiscing elit."
-              text run at (1,73) width 54: "Etiam et"
-              text run at (1,91) width 79: "ipsum. Nam"
-              text run at (1,109) width 80: "consectetuer"
-              text run at (1,127) width 84: "mi eget velit."
-layer at (8,60) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,52) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/float-move-during-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/float-move-during-layout-expected.txt
deleted file mode 100644
index 2422103d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/float-move-during-layout-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [8, 204, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [8, 104, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/float-overflow-expected.txt
deleted file mode 100644
index 54c439b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/float-overflow-expected.txt
+++ /dev/null
@@ -1,1273 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [11, 366, 778, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [11, 360, 778, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 537, 62, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 531, 62, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 498, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 492, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 459, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 453, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 420, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 414, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [61, 249, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [61, 243, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [61, 210, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [61, 204, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 171, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 165, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 132, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 126, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 93, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 87, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 54, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 48, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 15, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 9, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 366, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 360, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 327, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 321, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 288, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 282, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 504, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 498, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 465, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 459, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 426, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 420, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 216, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 210, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 177, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 171, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 138, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 132, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 99, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 93, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 60, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 54, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 21, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 15, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 374, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 368, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 335, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 329, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 296, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 290, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 375, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 369, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 336, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 330, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 297, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 291, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [67, 138, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [67, 132, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [65, 60, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [65, 54, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [65, 21, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [65, 15, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 543, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 537, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 504, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 498, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 465, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 459, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 426, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 420, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 255, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 249, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 216, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 210, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 177, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 171, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 99, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 93, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 543, 32, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 537, 32, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 255, 32, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 249, 32, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [66, 298, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [66, 297, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [66, 292, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [66, 291, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [63, 22, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [63, 21, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [63, 16, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [63, 15, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 544, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 543, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 538, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 537, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 505, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 504, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 499, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 498, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 466, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 465, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 460, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 459, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 427, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 426, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 421, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 420, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 256, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 255, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 250, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 249, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 217, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 216, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 211, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 210, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 178, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 177, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 172, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 171, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 139, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 138, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 133, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 132, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [58, 376, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [58, 375, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [58, 370, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [58, 369, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [58, 337, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [58, 336, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [58, 331, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [58, 330, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [57, 100, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [57, 99, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [57, 94, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [57, 93, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [57, 61, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [57, 60, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [57, 55, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [57, 54, 16, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/float-overflow-right-expected.txt
deleted file mode 100644
index 7865ee9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/float-overflow-right-expected.txt
+++ /dev/null
@@ -1,1273 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [11, 366, 778, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [11, 360, 778, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 537, 62, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 531, 62, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 498, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 492, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 459, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 453, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 420, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 414, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [677, 249, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [677, 243, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [677, 210, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [677, 204, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 171, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 165, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 132, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 126, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 93, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 87, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 54, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 48, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 15, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 9, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 366, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 360, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 327, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 321, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 288, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 282, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 504, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 498, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 465, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 459, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 426, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 420, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 216, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 210, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 177, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 171, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 138, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 132, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 99, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 93, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 60, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 54, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 21, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 15, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 374, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 368, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 335, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 329, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 296, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 290, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 543, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 537, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 504, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 498, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 465, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 459, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 426, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 420, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 255, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 249, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 216, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 210, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 177, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 171, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 99, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 93, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [695, 60, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [695, 54, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [695, 21, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [695, 15, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [693, 138, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [693, 132, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 375, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 369, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 336, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 330, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 297, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 291, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [701, 543, 32, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [701, 537, 32, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [701, 255, 32, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [701, 249, 32, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [727, 100, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [727, 99, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [727, 94, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [727, 93, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [727, 61, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [727, 60, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [727, 55, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [727, 54, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [726, 376, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [726, 375, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [726, 370, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [726, 369, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [726, 337, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [726, 336, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [726, 331, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [726, 330, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 544, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 543, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 538, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 537, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 505, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 504, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 499, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 498, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 466, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 465, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 460, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 459, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 427, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 426, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 421, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 420, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 256, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 255, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 250, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 249, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 217, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 216, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 211, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 210, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 178, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 177, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 172, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 171, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 139, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 138, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 133, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 132, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [721, 22, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [721, 21, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [721, 16, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [721, 15, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [718, 298, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [718, 297, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [718, 292, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [718, 291, 16, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-continuations-expected.txt
deleted file mode 100644
index 1e76a8b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-continuations-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "rect": [3, 83, 94, 30],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.png
deleted file mode 100644
index b6f677c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.txt
deleted file mode 100644
index 1e76a8b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "rect": [3, 83, 94, 30],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.png
deleted file mode 100644
index 7290f7290..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-ring-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-ring-expected.png
deleted file mode 100644
index 2200319..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-ring-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-child-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-child-move-expected.txt
deleted file mode 100644
index 01655ade..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-child-move-expected.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [96, 46, 308, 308],
-          "reason": "outline"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='child'",
-          "rect": [300, 50, 20, 300],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='child'",
-          "rect": [150, 50, 20, 300],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "outline"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='child'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-continuation-move-expected.txt
deleted file mode 100644
index ed577a4..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-continuation-move-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [204, 228, 108, 108],
-          "reason": "outline"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [4, 228, 108, 108],
-          "reason": "outline"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='block'",
-          "rect": [208, 232, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='block'",
-          "rect": [8, 232, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "outline"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='block'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt
deleted file mode 100644
index 330eb88..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 8, 784, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [4, 4, 108, 188],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [4, 4, 108, 188],
-          "reason": "outline"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='block'",
-          "rect": [8, 88, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='block'",
-          "rect": [8, 8, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "outline"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='block'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index 82f02e5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt
deleted file mode 100644
index 031bb75..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutButton BUTTON",
-          "rect": [3, 4, 56, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [16, 11, 30, 14],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 11, 30, 13],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutButton BUTTON",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Reset'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index 5301228..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt
deleted file mode 100644
index 05a2122..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSlider INPUT",
-          "rect": [7, 7, 135, 21],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='track'",
-          "rect": [10, 10, 129, 15],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutFlexibleBox DIV",
-          "rect": [10, 10, 129, 15],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='thumb'",
-          "rect": [67, 10, 15, 16],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSlider INPUT",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutFlexibleBox DIV",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='track'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='thumb'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index 12b2edd..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
deleted file mode 100644
index db0fa84..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutButton INPUT",
-          "rect": [3, 4, 63, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [16, 11, 37, 14],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 11, 37, 13],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutButton INPUT",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Submit'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/gradients-em-stops-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/gradients-em-stops-repaint-expected.txt
deleted file mode 100644
index 39bf133..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/gradients-em-stops-repaint-expected.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV class='em-units'",
-          "rect": [8, 8, 784, 146],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='box4' class='box'",
-          "rect": [344, 18, 302, 122],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='box3' class='box'",
-          "rect": [18, 18, 302, 122],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='indicator'",
-          "rect": [345, 19, 240, 20],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [330, 136, 4, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV class='em-units'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='box3' class='box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='box4' class='box'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='indicator'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.txt
deleted file mode 100644
index 6696c290..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 68, 732, 94],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 70, 728, 90],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 78, 712, 74],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.txt
deleted file mode 100644
index 2ac03b3..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 68, 732, 94],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 70, 728, 90],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [10, 70, 728, 90],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 78, 712, 74],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "appeared"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.png
deleted file mode 100644
index 9746f74..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.txt
deleted file mode 100644
index f43f29e..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x18
-        LayoutText {#text} at (0,0) size 329x18
-          text run at (0,0) width 329: "This is a repaint test of inline blocks with overflow."
-      LayoutBlockFlow (anonymous) at (0,44) size 784x20
-        LayoutInline {SPAN} at (0,0) size 200x18
-          LayoutText {#text} at (0,0) size 100x18
-            text run at (0,0) width 100: "Here comes an "
-          LayoutBlockFlow {SPAN} at (99.06,0) size 100x20 [bgcolor=#C0C0C0]
-            LayoutText {#text} at (0,0) size 93x36
-              text run at (0,0) width 76: "inline block"
-              text run at (0,18) width 93: "with overflow."
-        LayoutText {#text} at (0,0) size 0x0
-layer at (8,42) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,34) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-color-change-expected.txt
deleted file mode 100644
index 4579293..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-color-change-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "rect": [8, 68, 37, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 68, 37, 18],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.png
deleted file mode 100644
index 638fa78..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.txt
deleted file mode 100644
index 7972811..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [0, 34, 800, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [0, 0, 800, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 34, 429, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline A id='link'",
-          "rect": [581, -5, 224, 242],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 0, 40, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline A id='link'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Home'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'crbug.com/424078: ensure inline elements get their outline painted'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-2-expected.txt
deleted file mode 100644
index d3d1ec8..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-2-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [210, -5, 50, 20],
-          "reason": "outline"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [215, -1, 40, 12],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "outline"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "outline"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Test'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.png
deleted file mode 100644
index ece8b80..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.txt
deleted file mode 100644
index aec99b5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 166, 100, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='test'",
-          "rect": [5, 163, 98, 42],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 166, 92, 36],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutInline SPAN id='test'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsum'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'dolor\u00A0'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-overflow-expected.txt
deleted file mode 100644
index 1ae44d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-overflow-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [33, 32, 250, 102],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'A\u00A0\u00A0B'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-reflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-reflow-expected.txt
deleted file mode 100644
index 0b68ab2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-reflow-expected.txt
+++ /dev/null
@@ -1,113 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [0, -1, 300, 202],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div1' class='container'",
-          "rect": [0, 0, 300, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div2' class='container'",
-          "rect": [0, 300, 300, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, -1, 200, 302],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div1' class='container'",
-          "rect": [0, 0, 200, 300],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 299, 180, 22],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='div1' class='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'A A A A A AA AA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AA AA AAA AAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAA AAAA AAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAAA AAAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAAAA AAAAAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAAAA AAAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAAA AAAA AAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAA AAA AAA AA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AA AA AA A A A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'A A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='div2' class='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'A A A A A'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-vertical-lr-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-vertical-lr-overflow-expected.txt
deleted file mode 100644
index 7e292fe..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-vertical-lr-overflow-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [32, 33, 102, 250],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'A\u00A0\u00A0B'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-vertical-rl-overflow-expected.txt
deleted file mode 100644
index 1ce30cf..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/inline-vertical-rl-overflow-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [666, 33, 102, 250],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'A\u00A0\u00A0B'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
deleted file mode 100644
index c47aa32..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "rect": [8, 8, 29, 23],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 29, 18],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Text'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update-expected.png
deleted file mode 100644
index b0de2cc..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt
deleted file mode 100644
index 3c283e37b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='root' class='editing'",
-          "rect": [3, 3, 794, 28],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 7, 10, 19],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='root' class='editing'",
-      "reason": "full"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
deleted file mode 100644
index 461ce523..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTextControl INPUT id='root'",
-      "position": [5, 5],
-      "bounds": [47, 25],
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 47, 25],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 41, 19],
-          "reason": "full"
-        }
-      ]
-    },
-    {
-      "name": "Child Containment Layer",
-      "position": [5, 5],
-      "bounds": [37, 15]
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='inner-editor'",
-      "position": [1, 1],
-      "bounds": [35, 13],
-      "shouldFlattenTransform": false,
-      "drawsContent": true
-    },
-    {
-      "name": "Scrolling Layer",
-      "bounds": [35, 13],
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [67, 13],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [65, 0, 1, 13],
-          "reason": "caret"
-        }
-      ]
-    },
-    {
-      "name": "Overflow Controls Host Layer",
-      "bounds": [35, 13]
-    },
-    {
-      "name": "Horizontal Scrollbar Layer",
-      "position": [0, 13],
-      "bounds": [35, 0],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='root'",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt
deleted file mode 100644
index 54051b3..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTextControl INPUT id='root'",
-      "position": [5, 5],
-      "bounds": [47, 25],
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 47, 25],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 41, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [6, 6, 35, 13],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [6, 6, 35, 13],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='root'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'test test test'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
deleted file mode 100644
index 5516cd9f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
+++ /dev/null
@@ -1,161 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 2350],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
-          "rect": [8, 2000, 777, 350],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
-          "rect": [8, 2000, 777, 350],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 2200, 777, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 2200, 777, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 2050, 777, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 2050, 777, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 2045, 774, 109],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 2045, 774, 109],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 2195, 653, 109],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 2195, 653, 109],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'This test checks that switching opacity'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'invalidates the full subtree.'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'This text should be visible in the'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'output.'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'This test checks that switching opacity'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'invalidates the full subtree.'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'This text should be visible in the'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'output.'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.txt
deleted file mode 100644
index 5f5cdbc..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.txt
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [284, 123, 488, 399],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt
deleted file mode 100644
index 13e0419..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [416, 23, 356, 560],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
deleted file mode 100644
index ab37dbd..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.txt
deleted file mode 100644
index 7dc0936f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x18
-        LayoutText {#text} at (0,0) size 328x18
-          text run at (0,0) width 328: "This tests repainting of a layer's children's outlines."
-layer at (8,42) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,34) size 784x2 [border: (1px inset #EEEEEE)]
-layer at (8,52) size 100x100
-  LayoutBlockFlow (relative positioned) {DIV} at (0,44) size 100x100 [bgcolor=#C0C0C0]
-    LayoutBlockFlow {DIV} at (0,0) size 100x100
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.png
deleted file mode 100644
index b2383e30..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.txt
deleted file mode 100644
index ea35613..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x18
-        LayoutText {#text} at (0,0) size 213x18
-          text run at (0,0) width 213: "This tests for regressions against "
-        LayoutInline {I} at (0,0) size 551x18
-          LayoutInline {A} at (0,0) size 354x18 [color=#0000EE]
-            LayoutText {#text} at (212,0) size 354x18
-              text run at (212,0) width 354: "http://bugzilla.opendarwin.org/show_bug.cgi?id=7943"
-          LayoutText {#text} at (565,0) size 198x18
-            text run at (565,0) width 198: " Layer outline does not repaint"
-        LayoutText {#text} at (762,0) size 5x18
-          text run at (762,0) width 5: "."
-layer at (8,42) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,34) size 784x2 [border: (1px inset #EEEEEE)]
-layer at (18,192) size 100x100 clip at (19,193) size 98x98
-  LayoutBlockFlow {DIV} at (10,184) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (8,52) size 784x130
-  LayoutBlockFlow (relative positioned) {DIV} at (0,44) size 784x130
-layer at (18,62) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (10,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (148,62) size 100x100 backgroundClip at (138,52) size 100x100 clip at (138,52) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (140,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (278,62) size 100x100 backgroundClip at (268,52) size 5x5 clip at (268,52) size 5x5
-  LayoutBlockFlow (positioned) {DIV} at (270,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (408,62) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (400,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (538,62) size 100x100 backgroundClip at (548,72) size 100x100 clip at (548,72) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (530,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (668,62) size 100x100 backgroundClip at (773,167) size 5x5 clip at (773,167) size 5x5
-  LayoutBlockFlow (positioned) {DIV} at (660,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (18,322) size 100x100
-  LayoutBlockFlow (relative positioned) {DIV} at (0,294) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.png
deleted file mode 100644
index b2383e30..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.txt
deleted file mode 100644
index ea35613..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x18
-        LayoutText {#text} at (0,0) size 213x18
-          text run at (0,0) width 213: "This tests for regressions against "
-        LayoutInline {I} at (0,0) size 551x18
-          LayoutInline {A} at (0,0) size 354x18 [color=#0000EE]
-            LayoutText {#text} at (212,0) size 354x18
-              text run at (212,0) width 354: "http://bugzilla.opendarwin.org/show_bug.cgi?id=7943"
-          LayoutText {#text} at (565,0) size 198x18
-            text run at (565,0) width 198: " Layer outline does not repaint"
-        LayoutText {#text} at (762,0) size 5x18
-          text run at (762,0) width 5: "."
-layer at (8,42) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,34) size 784x2 [border: (1px inset #EEEEEE)]
-layer at (18,192) size 100x100 clip at (19,193) size 98x98
-  LayoutBlockFlow {DIV} at (10,184) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (8,52) size 784x130
-  LayoutBlockFlow (relative positioned) {DIV} at (0,44) size 784x130
-layer at (18,62) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (10,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (148,62) size 100x100 backgroundClip at (138,52) size 100x100 clip at (138,52) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (140,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (278,62) size 100x100 backgroundClip at (268,52) size 5x5 clip at (268,52) size 5x5
-  LayoutBlockFlow (positioned) {DIV} at (270,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (408,62) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (400,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (538,62) size 100x100 backgroundClip at (548,72) size 100x100 clip at (548,72) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (530,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (668,62) size 100x100 backgroundClip at (773,167) size 5x5 clip at (773,167) size 5x5
-  LayoutBlockFlow (positioned) {DIV} at (660,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (18,322) size 100x100
-  LayoutBlockFlow (relative positioned) {DIV} at (0,294) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layout-state-relative-expected.txt
deleted file mode 100644
index 608fef2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layout-state-relative-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
-          "rect": [8, 150, 784, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 150, 37, 18],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset-expected.txt
deleted file mode 100644
index 67e684fb..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [100, 118, 50, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [100, 118, 41, 18],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'after'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2-expected.txt
deleted file mode 100644
index 4ce0ea05..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [102, 120, 50, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [102, 120, 41, 18],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'after'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset3-expected.txt
deleted file mode 100644
index 3a6bb0c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset3-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [100, 118, 34, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [100, 118, 34, 18],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'after'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
deleted file mode 100644
index c988172..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 40, 784, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='target'",
-          "rect": [8, 220, 100, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='target'",
-          "rect": [8, 200, 100, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN",
-          "rect": [8, 120, 100, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 220, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 220, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 200, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 200, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1-expected.txt
deleted file mode 100644
index 9ce997e6..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1-expected.txt
+++ /dev/null
@@ -1,344 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 170, 407, 72],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 242, 406, 126],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 224, 406, 126],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 80, 406, 108],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 476, 406, 90],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 188, 406, 72],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 422, 355, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 404, 355, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 386, 355, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 368, 304, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [178, 350, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 350, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='pinkFloat'",
-          "rect": [378, 138, 70, 30],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 353, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 335, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [305, 170, 40, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 188, 40, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='pinkFloat'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The chief difficulty Alice found at first was in'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'managing her\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'flamingo: she succeeded in getting its'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'body tucked away,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'comfortably enough, under her'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'arm, with its legs hanging down,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'but generally, just as'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she had got its neck nicely straightened\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'out, and was going to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'give the hedgehog a blow with its head, it\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' twist itself'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'round and look up in her face, with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'such a puzzled expression'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'that she could not help bursting out\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'laughing: and when she'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had got its head down, and was going to\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'very provoking to find that the hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'and was in the act of crawling away: besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'generally a ridge or furrow in the way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'send the hedgehog to, and, as the doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'always getting up and walking off to other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice soon came to the conclusion that it was a very'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'here; the great\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10-expected.txt
deleted file mode 100644
index 9a9858e..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10-expected.txt
+++ /dev/null
@@ -1,220 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 242, 406, 126],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 476, 406, 90],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 422, 355, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 404, 355, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 386, 304, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 368, 304, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [178, 350, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 353, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 364, 48, 64],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a furious passion, and went'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and shouting \u2018Off with his head!\u2019 or'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'here; the great\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2-expected.txt
deleted file mode 100644
index 8722cfce..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2-expected.txt
+++ /dev/null
@@ -1,382 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 569, 418, 7],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 246, 406, 126],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 242, 406, 126],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 480, 406, 90],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 476, 406, 90],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 191, 406, 73],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 188, 406, 72],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 426, 355, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 422, 355, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 408, 355, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 404, 355, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 80, 354, 108],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 390, 304, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 386, 304, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 372, 304, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 368, 304, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [178, 354, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [178, 350, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [372, 375, 48, 81],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [372, 371, 48, 81],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 357, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 353, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 188, 45, 22],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "incremental"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The chief difficulty Alice found at first was in'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'managing her\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'flamingo: she succeeded in getting its'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'body tucked away,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'comfortably enough, under her'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'arm, with its legs hanging down,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'but generally, just as'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she had got its neck nicely straightened\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'out, and was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'going to give the hedgehog a blow with its head, it'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline I id='would'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'would'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' twist itself round and look up in her face, with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'such a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'puzzled expression that she could not help bursting out'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'to\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'here; the great\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3-expected.txt
deleted file mode 100644
index 2f8b05f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3-expected.txt
+++ /dev/null
@@ -1,220 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 242, 406, 126],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 476, 406, 90],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 368, 355, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 422, 355, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 404, 355, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 368, 336, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [178, 350, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [356, 389, 64, 81],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [372, 371, 48, 81],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a furious passion, and went'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and shouting \u2018Off with his head!\u2019 or'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'here; the great\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4-expected.txt
deleted file mode 100644
index a7687c36..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4-expected.txt
+++ /dev/null
@@ -1,219 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 242, 406, 126],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 476, 406, 90],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 422, 406, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 404, 355, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 386, 304, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 368, 304, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [178, 350, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [372, 435, 48, 17],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'head!\u2019 about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'here; the great\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5-expected.txt
deleted file mode 100644
index e38a551..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5-expected.txt
+++ /dev/null
@@ -1,229 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 242, 406, 126],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 476, 406, 90],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 422, 355, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 404, 355, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [49, 368, 320, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 368, 304, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [49, 368, 301, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [178, 350, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [162, 350, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [46, 353, 16, 65],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'here; the great\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6-expected.txt
deleted file mode 100644
index c2a4aac..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6-expected.txt
+++ /dev/null
@@ -1,124 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 242, 406, 126],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 368, 304, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [178, 350, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 353, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [27, 353, 22, 19],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'foo'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7-expected.txt
deleted file mode 100644
index 9d8c074..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7-expected.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 422, 355, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 404, 355, 36],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 386, 304, 36],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='theQueen'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'the'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Queen'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8-expected.txt
deleted file mode 100644
index e5e06b1f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8-expected.txt
+++ /dev/null
@@ -1,296 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 74, 418, 498],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 242, 406, 126],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 188, 406, 72],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 404, 355, 72],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 368, 355, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 404, 355, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 80, 354, 108],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 368, 336, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 368, 304, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [178, 350, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [127, 350, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 353, 48, 65],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 188, 40, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The chief difficulty Alice found at first was in'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'managing her\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'flamingo: she succeeded in getting its'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'body tucked away,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'comfortably enough, under her'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'arm, with its legs hanging down,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'but generally, just as'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she had got its neck nicely straightened\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'out, and was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'going to give the hedgehog a blow with its head, it'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' twist itself round and look up in her face, with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'such a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'puzzled expression that she could not help bursting out'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'to\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'that it was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'about once in a minute.\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9-expected.txt
deleted file mode 100644
index 796e6f0..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9-expected.txt
+++ /dev/null
@@ -1,318 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 569, 418, 21],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 242, 406, 126],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 494, 406, 90],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 476, 406, 90],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 188, 406, 72],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 440, 355, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 422, 355, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 404, 355, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 404, 355, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 386, 304, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 386, 304, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 368, 304, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [178, 350, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 368, 145, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [372, 389, 48, 81],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [372, 371, 48, 81],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='yellowFloat'",
-          "rect": [372, 245, 48, 49],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [485, 0, 15, 600],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [485, 0, 15, 600],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "incremental"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' twist itself round and look up in her face, with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'such a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'puzzled expression that she could not help bursting out'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'to\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='yellowFloat'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'crawling away: besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ridge or furrow in the way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'send the hedgehog to, and, as the doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'always getting up and walking off to other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice soon came to the conclusion that it was a very'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'here; the great\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-in-scrolled-clipped-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-in-scrolled-clipped-block-expected.txt
deleted file mode 100644
index e36facf..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-in-scrolled-clipped-block-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [8, 8, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 100, 18],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox '                         PASS     .'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-overflow-expected.txt
deleted file mode 100644
index 1e7f83f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/line-overflow-expected.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 114, 200, 90],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 78, 198, 54],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='t'",
-          "rect": [115, 84, 37, 48],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [115, 114, 37, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='t'",
-          "rect": [38, 132, 36, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [38, 132, 36, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Cras faucibus. Nunc'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'adipiscing, enim in scelerisque'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'convallis,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'augue '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='t'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'purus'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' eleifend'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'lacus, at sagittis eros leo'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'pulvinar velit. Integer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'sollicitudin nisi ut urna blandit'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'convallis.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/lines-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/lines-with-layout-delta-expected.txt
deleted file mode 100644
index 7f00824..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/lines-with-layout-delta-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='target'",
-          "rect": [8, 58, 200, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 58, 37, 18],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/list-marker-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/list-marker-2-expected.txt
deleted file mode 100644
index 31c6e763..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/list-marker-2-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutListItem LI",
-          "rect": [48, 94, 744, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG id='target'",
-          "rect": [48, 94, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutListMarker (anonymous)",
-          "rect": [31, 180, 7, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutListMarker (anonymous)",
-          "rect": [31, 130, 7, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutListItem LI",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutListMarker (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG id='target'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.png
deleted file mode 100644
index f0e934f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.txt
deleted file mode 100644
index d3ec300..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x576
-      LayoutBlockFlow {P} at (0,0) size 784x36
-        LayoutText {#text} at (0,0) size 54x18
-          text run at (0,0) width 54: "Test for "
-        LayoutInline {I} at (0,0) size 739x36
-          LayoutInline {A} at (0,0) size 305x18 [color=#0000EE]
-            LayoutText {#text} at (53,0) size 305x18
-              text run at (53,0) width 305: "http://bugs.webkit.org/show_bug.cgi?id=12910"
-          LayoutText {#text} at (357,0) size 739x36
-            text run at (357,0) width 5: " "
-            text run at (361,0) width 378: "REGRESSION (r18756-r18765): list-bullet doesn't redraw"
-            text run at (0,18) width 375: "properly when changing the list's content using JavaScript"
-        LayoutText {#text} at (374,18) size 5x18
-          text run at (374,18) width 5: "."
-      LayoutBlockFlow {UL} at (0,52) size 784x18
-        LayoutListItem {LI} at (40,0) size 744x18
-          LayoutBlockFlow (anonymous) at (0,0) size 744x18
-            LayoutListMarker (anonymous) at (-17,0) size 7x18: bullet
-            LayoutText {#text} at (0,0) size 22x18
-              text run at (0,0) width 22: "foo"
-          LayoutBlockFlow {DIV} at (10,28) size 724x0
-      LayoutBlockFlow {UL} at (0,86) size 784x18
-        LayoutListItem {LI} at (40,0) size 744x18
-          LayoutBlockFlow (anonymous) at (0,0) size 744x18
-            LayoutListMarker (anonymous) at (-1,0) size 7x18: bullet
-            LayoutText {#text} at (22,0) size 21x18
-              text run at (22,0) width 21: "bar"
-          LayoutBlockFlow {DIV} at (10,28) size 724x0
-      LayoutBlockFlow {UL} at (0,120) size 784x18
-        LayoutListItem {LI} at (0,0) size 744x18
-          LayoutBlockFlow (anonymous) at (0,0) size 744x18
-            LayoutListMarker (anonymous) at (754,0) size 7x18: bullet
-            LayoutText {#text} at (722,0) size 22x18
-              text run at (722,0) width 22: "foo"
-          LayoutBlockFlow {DIV} at (10,28) size 724x0
-      LayoutBlockFlow {UL} at (0,154) size 784x18
-        LayoutListItem {LI} at (0,0) size 744x18
-          LayoutBlockFlow (anonymous) at (0,0) size 744x18
-            LayoutListMarker (anonymous) at (738,0) size 7x18: bullet
-            LayoutText {#text} at (701,0) size 21x18
-              text run at (701,0) width 21: "bar"
-          LayoutBlockFlow {DIV} at (10,28) size 724x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/make-children-non-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/make-children-non-inline-expected.txt
deleted file mode 100644
index 1525cde2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/make-children-non-inline-expected.txt
+++ /dev/null
@@ -1,353 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 60, 784, 262],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 60, 784, 90],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 250, 784, 72],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 250, 113, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 150, 113, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 132, 80, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 132, 80, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 96, 80, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 96, 80, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 268, 69, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 168, 69, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 304, 64, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 204, 64, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 114, 45, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 114, 45, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 78, 44, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 78, 44, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 60, 40, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 60, 40, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 286, 30, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 186, 30, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [8, 150, 10, 100],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Word,'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'words,'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'more words.'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'I could'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'write a book'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'about all the stuff'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'that comes'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'after'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'the break.'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame-expected.txt
deleted file mode 100644
index 2bd23a5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [146, 11, 125, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 125, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [146, 11, 43, 13],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 11, 43, 13],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASSED'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASSED'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-as-paint-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-as-paint-container-expected.txt
deleted file mode 100644
index fa7976d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-as-paint-container-expected.txt
+++ /dev/null
@@ -1,108 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='target'",
-      "position": [8, 8],
-      "bounds": [630, 180],
-      "drawsContent": true,
-      "backfaceVisibility": "hidden",
-      "paintInvalidations": [
-        {
-          "object": "LayoutMultiColumnSet (anonymous)",
-          "rect": [0, 0, 630, 180],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, -1, 625, 181],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsum'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'dolor sit amet,'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'consectetur'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'adipiscing'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'elit. Fusce'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'varius, metus'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'eu fringilla'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'pulvinar, ipsum'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'sapien'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'ultricies arcu,'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'non condimentum'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'quam est eu'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'purus. Ut nisl'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'libero,'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'suscipit ut leo'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'eget, dapibus'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'ultrices dolor.'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutMultiColumnSet (anonymous)",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-repaint-expected.txt
deleted file mode 100644
index 4f9ffa2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-repaint-expected.txt
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutMultiColumnFlowThread (anonymous)",
-          "rect": [9, 9, 400, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='a'",
-          "rect": [234, 9, 300, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [234, 14, 300, 52],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [234, 14, 50, 52],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [9, 9, 13, 59],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutMultiColumnFlowThread (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'XXXXXX'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-expected.txt
deleted file mode 100644
index 4a4a951..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 579, 80, 22],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target'",
-          "rect": [0, 580, 80, 20],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt
deleted file mode 100644
index d62e8b5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [508, 27, 80, 22],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target'",
-          "rect": [508, 28, 80, 20],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-block-expected.txt
deleted file mode 100644
index 6329003..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-block-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [328, 8, 240, 21],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [488, 8, 150, 20],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-inline-expected.txt
deleted file mode 100644
index 556de9c9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-inline-expected.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [328, 8, 240, 21],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-text-expected.txt
deleted file mode 100644
index 302f5dc5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/multicol-with-text-expected.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutMultiColumnFlowThread (anonymous)",
-          "rect": [8, 8, 630, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [328, 8, 240, 21],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutMultiColumnFlowThread (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/non-text-link-invalidation-optimization-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/non-text-link-invalidation-optimization-expected.png
deleted file mode 100644
index 472bc2a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/non-text-link-invalidation-optimization-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt
deleted file mode 100644
index 53c16ff..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) UL id='submenu'",
-          "rect": [48, 92, 40, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) UL id='submenu'",
-          "rect": [48, -158, 40, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutListMarker (anonymous)",
-          "rect": [71, 92, 7, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutListMarker (anonymous)",
-          "rect": [71, -158, 7, 18],
-          "reason": "geometry"
-        }
-      ]
-    },
-    {
-      "name": "LayoutListItem (floating) LI id='watches'",
-      "position": [31, 42],
-      "transformOrigin": [17, 9],
-      "bounds": [24, 18],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutInline (relative positioned) SPAN id='placeholder'",
-      "position": [17, 0],
-      "backfaceVisibility": "hidden"
-    },
-    {
-      "name": "LayoutListItem (relative positioned) (floating) LI id='menu'",
-      "position": [31, 42],
-      "bounds": [17, 18],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutListMarker (anonymous)",
-          "rect": [0, 0, 7, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutListMarker (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) UL id='submenu'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutListItem LI",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutListMarker (anonymous)",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/opacity-change-on-overflow-float-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/opacity-change-on-overflow-float-expected.txt
deleted file mode 100644
index c86dd1a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/opacity-change-on-overflow-float-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (floating) DIV class='green'",
-          "rect": [8, 78, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV class='green'",
-          "rect": [8, 78, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV class='red'",
-          "rect": [8, 78, 100, 100],
-          "reason": "background"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV class='green'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV class='red'",
-      "reason": "background"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV class='green'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-become-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-become-affected-by-descendant-expected.txt
deleted file mode 100644
index ced01b4..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-become-affected-by-descendant-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='outline'",
-          "rect": [4, 4, 158, 108],
-          "reason": "outline"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='child'",
-          "rect": [58, 8, 100, 50],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='outline'",
-      "reason": "outline"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='child'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt
deleted file mode 100644
index 9d2ead9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='outline'",
-          "rect": [4, 4, 158, 108],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='child'",
-          "rect": [58, 8, 100, 50],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='outline'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='child'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-clip-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-clip-change-expected.txt
deleted file mode 100644
index 194f2ce..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-clip-change-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) A id='link' class='updated'",
-          "rect": [43, 97, 97, 28],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [48, 102, 87, 18],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) A id='link' class='updated'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Lorem Ipsum'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-continuations-expected.txt
deleted file mode 100644
index 9a51e19..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-continuations-expected.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [18, 148, 200, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [18, 110, 200, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "rect": [16, 108, 88, 60],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "rect": [16, 146, 88, 22],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 148, 84, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 110, 84, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'CONTENTS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'CONTENTS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-inset-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-inset-expected.txt
deleted file mode 100644
index 3932fe25..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-inset-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 189, 200, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 29, 200, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='b'",
-          "rect": [29, 229, 180, 20],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='a'",
-          "rect": [29, 69, 180, 20],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='a'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='b'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-repaint-glitch-expected.txt
deleted file mode 100644
index 73478787..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/outline-repaint-glitch-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [15, 377, 208, 68],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [15, 217, 208, 68],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='b'",
-          "rect": [29, 421, 180, 20],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='a'",
-          "rect": [29, 261, 180, 20],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='a'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='b'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overflow-delete-line-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overflow-delete-line-expected.txt
deleted file mode 100644
index 480b7f7..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overflow-delete-line-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='dv'",
-          "rect": [8, 70, 80, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 70, 74, 18],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 70, 47, 36],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='dv'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsu'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.png
deleted file mode 100644
index 3c6e9c9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.txt
deleted file mode 100644
index b1af0dc..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.txt
+++ /dev/null
@@ -1,134 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [2008, 2092],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 2008, 2092],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 585, 785, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 16, 784, 2068],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 50, 784, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 16, 784, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [127, 50, 390, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 16, 348, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 50, 120, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [785, 0, 15, 585],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [785, 585, 15, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [516, 50, 5, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'You should see both vertical and horizontal scrollbars.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'This is the test for '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Bug 36461 - No vertical scrollbar after the CSS class change'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.png
deleted file mode 100644
index ce6ebee..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overhanging-float-detach-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overhanging-float-detach-repaint-expected.txt
deleted file mode 100644
index af9835e..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/overhanging-float-detach-repaint-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (floating) DIV class='float'",
-          "rect": [8, 62, 100, 100],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV class='float'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='floatContainer'",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl-expected.png
deleted file mode 100644
index 857d8c6..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
deleted file mode 100644
index df59711..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-target'",
-          "rect": [8, 184, 784, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-target'",
-          "rect": [18, 18, 284, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 18, 23, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 184, 23, 18],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-target'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'abc'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-target'",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/positioned-document-element-expected.txt
deleted file mode 100644
index 266a428..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/positioned-document-element-expected.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#008000",
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 800, 600],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) HTML class='changed'",
-          "rect": [0, 0, 800, 50],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 16, 784, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) HTML class='changed'",
-          "rect": [100, 100, 451, 50],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [108, 116, 435, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [108, 116, 435, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 16, 435, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) HTML class='changed'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/positioned-great-grandparent-change-location-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/positioned-great-grandparent-change-location-expected.txt
deleted file mode 100644
index 7dcc98b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/positioned-great-grandparent-change-location-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [100, 200, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [100, 100, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [100, 200, 41, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [100, 100, 41, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Target'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/positioned-list-offset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/positioned-list-offset-change-repaint-expected.txt
deleted file mode 100644
index e0414b76..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/positioned-list-offset-change-repaint-expected.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutListItem (positioned) LI",
-          "rect": [8, 60, 214, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [8, 60, 214, 232],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutListItem (positioned) LI",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutListMarker (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/push-block-with-first-line-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/push-block-with-first-line-expected.txt
deleted file mode 100644
index ec35408..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/push-block-with-first-line-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='spacer'",
-          "rect": [8, 8, 784, 60],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='test'",
-          "rect": [8, 68, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='test'",
-          "rect": [8, 8, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 67, 140, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 7, 140, 22],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='spacer'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='test'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'JOCULAR'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/quotes-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/quotes-expected.txt
deleted file mode 100644
index 6b2921ad..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/quotes-expected.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 26, 784, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [15, 26, 49, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [17, 26, 48, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [64, 26, 10, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [8, 26, 10, 18],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [63, 26, 8, 18],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline Q id='q2' class='q-changed'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutInline \u003Cpseudo:before\u003E",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutQuote (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '{'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'quote 2'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutInline \u003Cpseudo:after\u003E",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutQuote (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '}'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt
deleted file mode 100644
index 39fd066f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 784, 18],
-          "reason": "geometry"
-        }
-      ]
-    },
-    {
-      "name": "LayoutInline (relative positioned) DIV id='block'",
-      "position": [68, 7],
-      "bounds": [374, 20],
-      "drawsContent": true,
-      "backfaceVisibility": "hidden",
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline (relative positioned) DIV id='block'",
-          "rect": [0, 0, 374, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [1, 1, 372, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline (relative positioned) DIV id='block'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'When this layer moves it shouldn't generate a repaint rect.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/remove-block-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/remove-block-after-layout-expected.txt
deleted file mode 100644
index 524ac10..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/remove-block-after-layout-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target'",
-          "rect": [8, 108, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 108, 100, 36],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='target'",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/remove-inline-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/remove-inline-after-layout-expected.txt
deleted file mode 100644
index e0ebf8d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/remove-inline-after-layout-expected.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 108, 784, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [112, 194, 181, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [292, 108, 101, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [112, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [108, 194, 4, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/remove-inline-layer-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/remove-inline-layer-after-layout-expected.txt
deleted file mode 100644
index fa532a2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/remove-inline-layer-after-layout-expected.txt
+++ /dev/null
@@ -1,82 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 108, 784, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "rect": [112, 108, 181, 104],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [112, 194, 181, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [292, 108, 101, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [112, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [108, 194, 4, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
deleted file mode 100644
index 2d855c9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.txt
deleted file mode 100644
index aa99299..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {DIV} at (0,0) size 784x19
-        LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow (anonymous) at (0,19) size 784x18
-        LayoutText {#text} at (0,0) size 4x18
-          text run at (0,0) width 4: " "
-      LayoutBlockFlow {DIV} at (0,37) size 784x0
-layer at (11,11) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13
-caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png
deleted file mode 100644
index 60e0862..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt
deleted file mode 100644
index aa7cbd7f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV",
-          "rect": [428, 38, 300, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='container'",
-          "rect": [408, 18, 300, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV",
-          "rect": [28, 38, 300, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='container'",
-          "rect": [8, 18, 300, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [428, 38, 275, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [28, 38, 275, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'There should only be one copy of this text.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt
deleted file mode 100644
index 96b7207c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt
+++ /dev/null
@@ -1,107 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#C0C0C0",
-      "paintInvalidations": [
-        {
-          "object": "LayoutIFrame (positioned) IFRAME",
-          "rect": [2, 65, 236, 235],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [2, 300, 236, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [3, 65, 235, 235],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [3, 65, 235, 235],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [3, 300, 235, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [3, 65, 225, 235],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 65, 58, 16],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [237, 65, 16, 235],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [237, 300, 16, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [238, 65, 15, 235],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [238, 300, 15, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame (positioned) IFRAME",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'scroll me'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/repaint-svg-after-style-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/repaint-svg-after-style-change-expected.txt
deleted file mode 100644
index 633dffb..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/repaint-svg-after-style-change-expected.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x221
-  LayoutBlockFlow {HTML} at (0,0) size 800x221
-    LayoutBlockFlow {BODY} at (8,8) size 784x205
-      LayoutSVGRoot {svg} at (0,0) size 201x201
-        LayoutSVGContainer {g} at (0,0) size 200x200
-          LayoutSVGPath {path} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [data="M 0 0 L 0 200 L 200 200 L 200 0 Z"]
-          LayoutSVGPath {path} at (0,0) size 200x200 [fill={[type=SOLID] [color=#008000]}] [data="M 0 0 L 0 200 L 200 200 L 200 0 Z"]
-      LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
deleted file mode 100644
index 182e242..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV class='imgContainer'",
-          "rect": [8, 8, 194, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [8, 8, 194, 232],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV class='imgContainer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.png
deleted file mode 100644
index 63b64fc9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.txt
deleted file mode 100644
index 89c929d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [500, 400],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutIFrame (positioned) IFRAME",
-          "rect": [0, 200, 500, 200],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 200, 500, 200],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow H3",
-          "rect": [8, 300, 400, 22],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [485, 0, 15, 200],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutIFrame (positioned) IFRAME",
-      "reason": "incremental"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow H3",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe-expected.txt
deleted file mode 100644
index 82485c5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe-expected.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 108, 784, 304],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 108, 300, 300],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [8, 193, 285, 200],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [8, 393, 285, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [93, 108, 200, 285],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [8, 193, 85, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [293, 108, 15, 285],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [93, 108, 15, 85],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [293, 393, 15, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [93, 193, 15, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/ruby-flipped-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/ruby-flipped-blocks-expected.txt
deleted file mode 100644
index 28dc7c0..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/ruby-flipped-blocks-expected.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 8, 30, 40],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [7, 28, 22, 20],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [7, 8, 22, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutRubyBase (anonymous)",
-          "rect": [8, 28, 20, 20],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutRubyRun (anonymous)",
-          "rect": [8, 28, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [27, 33, 12, 10],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutRubyRun (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'c'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutRubyBase (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'b'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
deleted file mode 100644
index d01718aa..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [12, 45, 113, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [12, 45, 52, 13],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'some text'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/select-option-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/select-option-background-color-expected.txt
deleted file mode 100644
index f7aa4527..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/select-option-background-color-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow OPTION id='option'",
-          "rect": [1, 35, 12, 15],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow OPTION id='option'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.png
deleted file mode 100644
index e6c5a9c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.txt
deleted file mode 100644
index fb64076..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 68, 784, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage (relative positioned) IMG id='test' class='moved'",
-          "rect": [8, 148, 214, 232],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage (relative positioned) IMG id='test' class='moved'",
-          "rect": [8, 68, 214, 232],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage (relative positioned) IMG id='test' class='moved'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection-after-delete-expected.txt
deleted file mode 100644
index 1152674..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection-after-delete-expected.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='test'",
-          "rect": [38, 74, 152, 110],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [39, 75, 123, 108],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='test'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection-after-remove-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection-after-remove-expected.txt
deleted file mode 100644
index 1b49198..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection-after-remove-expected.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='test'",
-          "rect": [38, 74, 152, 110],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [39, 75, 123, 108],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [112, 165, 42, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [74, 75, 39, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [39, 75, 36, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline SPAN id='removeme'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='test'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hello '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'world'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection-clear-expected.txt
deleted file mode 100644
index 5f8988d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection-clear-expected.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='firstLine'",
-          "rect": [8, 8, 100, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 208, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='root'",
-          "rect": [8, 208, 100, 100],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 49, 98, 118],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 49, 8, 18],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='root'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='root'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='firstLine'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt
deleted file mode 100644
index 5c4650c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 33, 79, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 11, 61, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutTableCell TD id='firstCell'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'First cell'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD id='secondCell'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Second cell'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt
deleted file mode 100644
index b87573e2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 48, 34],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'xx'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'y'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
deleted file mode 100644
index af23a82..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [-8, 8, 48, 34],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'xx'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'y'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
deleted file mode 100644
index 3941c57..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [6, 8, 34, 48],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'xx'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'y'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt
deleted file mode 100644
index 7143be3..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='target'",
-          "rect": [5, 5, 47, 25],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 35, 13],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 11, 35, 13],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutTextControl INPUT id='target'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'test test test'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png
deleted file mode 100644
index 12bb45c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt
deleted file mode 100644
index 360222a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 829],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 735, 785, 94],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-          "rect": [8, 180, 769, 641],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-          "rect": [8, 86, 769, 641],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 86, 732, 94],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 88, 728, 90],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [10, 88, 728, 90],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 96, 712, 74],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [58, 230, 489, 537],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [58, 136, 489, 537],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt
deleted file mode 100644
index 47d47419..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt
+++ /dev/null
@@ -1,104 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 735],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 735, 785, 98],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-          "rect": [8, 184, 769, 641],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-          "rect": [8, 86, 769, 641],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 86, 769, 98],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 86, 732, 94],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 88, 728, 90],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 96, 712, 74],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [58, 234, 489, 537],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [58, 136, 489, 537],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
deleted file mode 100644
index 6dcb8d97..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [1059, 585],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 68, 836, 190],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Col 1'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/slider-thumb-drag-release-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/slider-thumb-drag-release-expected.png
deleted file mode 100644
index d6e2d0d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/slider-thumb-drag-release-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/slider-thumb-float-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/slider-thumb-float-expected.png
deleted file mode 100644
index 42e74b8b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/slider-thumb-float-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics-expected.txt
deleted file mode 100644
index 3e371ed..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='stacked'",
-          "rect": [19, 159, 200, 41],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 153, 132, 47],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='stacked'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/subtree-layoutstate-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/subtree-layoutstate-transform-expected.txt
deleted file mode 100644
index b635d68..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/subtree-layoutstate-transform-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV class='layoutroot'",
-          "rect": [28, 46, 200, 200],
-          "reason": "background"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [28, 46, 200, 200],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV class='layoutroot'",
-      "reason": "background"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png
deleted file mode 100644
index 0dc02402..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
deleted file mode 100644
index a826c0f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 125, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 11, 29, 13],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div'",
-          "rect": [8, 288, 10, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='div'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.png
deleted file mode 100644
index 1d26551..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt
deleted file mode 100644
index 6edb515..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt
+++ /dev/null
@@ -1,116 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 50, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [42, 117, 334, 268],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [42, 117, 334, 268],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [42, 117, 334, 268],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [242, 251, 167, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [242, 51, 167, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [9, 251, 167, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [9, 51, 167, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [17, 217, 84, 68],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [17, 217, 84, 68],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [17, 217, 84, 68],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [67, 251, 42, 67],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [67, 184, 42, 67],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/add-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/add-outline-property-on-root-expected.txt
deleted file mode 100644
index ee2f9aa9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/add-outline-property-on-root-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 784, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [-2, -2, 120, 120],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.png
deleted file mode 100644
index c2ded6e8..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt
deleted file mode 100644
index 6e536a6..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [203, 335, 121, 43],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [203, 335, 121, 43],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [246, 104, 119, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [246, 104, 119, 28],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [354, 125, 105, 102],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [111, 82, 101, 102],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGImage image id='image'",
-          "rect": [352, 395, 98, 99],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGImage image id='image'",
-          "rect": [90, 206, 98, 98],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text id='text'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'This is some text'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGImage image id='image'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-expected.png
deleted file mode 100644
index 3dec8f1c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size-expected.png
deleted file mode 100644
index fc6d481..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-same-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-same-image-expected.png
deleted file mode 100644
index 3dec8f1c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-same-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/append-text-node-to-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/append-text-node-to-tspan-expected.txt
deleted file mode 100644
index ba9bf2c5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/append-text-node-to-tspan-expected.txt
+++ /dev/null
@@ -1,145 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='modify'",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [10, 62, 306, 378],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='modify'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'SS'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/circle-move-invalidation-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/circle-move-invalidation-expected.png
deleted file mode 100644
index b912a5d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/circle-move-invalidation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/ems-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/ems-display-none-expected.txt
deleted file mode 100644
index 43539c0e..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/ems-display-none-expected.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 54, 571, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 54, 571, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 54, 571, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 54, 571, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [50, 54, 571, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='tspan'",
-          "rect": [50, 54, 571, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [50, 54, 571, 86],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='tspan'",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Two lines of text should be visible.'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Two lines of text should be visible.'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/exs-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/exs-display-none-expected.txt
deleted file mode 100644
index ce1c377..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/exs-display-none-expected.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 50, 571, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 50, 571, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 50, 571, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 50, 571, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [50, 50, 571, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='tspan'",
-          "rect": [50, 50, 571, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [50, 50, 571, 82],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='tspan'",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Two lines of text should be visible.'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Two lines of text should be visible.'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/foreignObject-crash-on-hover-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/foreignObject-crash-on-hover-expected.png
deleted file mode 100644
index 727bce3..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/foreignObject-crash-on-hover-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/hit-test-unclosed-subpaths-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/hit-test-unclosed-subpaths-expected.png
deleted file mode 100644
index d57d94b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/hit-test-unclosed-subpaths-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/image-href-change-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/image-href-change-expected.png
deleted file mode 100644
index 1887fe7..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/image-href-change-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.png
deleted file mode 100644
index b32b5dd..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt
deleted file mode 100644
index d3b9564..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt
+++ /dev/null
@@ -1,111 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='inner'",
-          "rect": [0, 0, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [89, 86, 111, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [89, 86, 111, 18],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 86, 101, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 86, 101, 18],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [180, 120, 20, 20],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGPath polygon id='triangle'",
-          "rect": [180, 120, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [180, 60, 20, 20],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [80, 120, 20, 20],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGPath polygon id='triangle'",
-          "rect": [80, 120, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [80, 60, 20, 20],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGViewportContainer svg id='inner'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'right-aligned text'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGPath polygon id='triangle'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt
deleted file mode 100644
index 5d6af69..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt
+++ /dev/null
@@ -1,98 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [16, 39, 784, 174],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [16, 39, 784, 174],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 39, 784, 174],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 39, 784, 174],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [16, 39, 784, 174],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [16, 39, 784, 174],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [0, 0, 334, 500],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-creation-expected.txt
deleted file mode 100644
index d9efbeac..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-creation-expected.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [16, 39, 784, 174],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 39, 784, 174],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [16, 39, 784, 174],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [0, 0, 334, 500],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.png
deleted file mode 100644
index ce2061c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt
deleted file mode 100644
index 60d19d00..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [0, 14, 753, 366],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 246, 753, 134],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 246, 753, 134],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 129, 596, 135],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 129, 596, 135],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 14, 443, 131],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 14, 443, 131],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceLinearGradient linearGradient id='fillLinearGradient'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGResourceLinearGradient linearGradient id='strokeLinearGradient'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Gradient on fill'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Gradient on stroke'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Gradient on fill/stroke'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-creation-expected.txt
deleted file mode 100644
index f60c801..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-creation-expected.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [33, 22, 693, 196],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [33, 22, 693, 196],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Gradient on fill'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGResourceLinearGradient linearGradient id='dynGrad'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.png
deleted file mode 100644
index 7224eb3..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt
deleted file mode 100644
index a38ca8e4..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt
+++ /dev/null
@@ -1,146 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [0, 14, 678, 366],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 246, 678, 134],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 246, 678, 134],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 129, 520, 135],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 129, 520, 135],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 14, 368, 131],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 14, 368, 131],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [16, 16, 18, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [16, 16, 18, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [8, 8, 17, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [8, 8, 17, 17],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourcePattern pattern id='fillPattern'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGResourcePattern pattern id='strokePattern'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Pattern on fill'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Pattern on stroke'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Pattern on fill/stroke'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-creation-expected.txt
deleted file mode 100644
index 260b6c9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-creation-expected.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [33, 22, 618, 196],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [33, 22, 618, 196],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [16, 25, 18, 25],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [8, 12, 17, 26],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Pattern on fill'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGResourcePattern pattern id='dynPattern'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt
deleted file mode 100644
index 73fc3bb0..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt
+++ /dev/null
@@ -1,132 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='modify'",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [10, 62, 306, 378],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='modify'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt
deleted file mode 100644
index 704978ff..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [23, 8, 85, 24],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='target'",
-          "rect": [23, 8, 85, 24],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [58, 45, 50, 27],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='source'",
-          "rect": [58, 45, 50, 27],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text id='target'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' B C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGText text id='source'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'X Y Z'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/outline-offset-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/outline-offset-text-expected.txt
deleted file mode 100644
index 3e9887d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/outline-offset-text-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [103, 24, 160, 116],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [103, 24, 160, 116],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [63, 24, 160, 116],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [63, 24, 160, 116],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Foo'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/paintorder-filtered-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/paintorder-filtered-expected.png
deleted file mode 100644
index 711e7f7..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/paintorder-filtered-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-expected.txt
deleted file mode 100644
index bc11cbe8..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 68, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [9, 69, 400, 400],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [9, 69, 400, 400],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.png
deleted file mode 100644
index ec18128..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt
deleted file mode 100644
index 435fa1f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 68, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [47, 107, 324, 324],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [48, 108, 322, 322],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [8, 150, 102, 238],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [9, 151, 100, 236],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt
deleted file mode 100644
index d7a45535..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt
+++ /dev/null
@@ -1,121 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 68, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='targetUse'",
-          "rect": [209, 269, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [209, 269, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [209, 269, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [209, 269, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use id='targetUse'",
-          "rect": [109, 169, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [109, 169, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [9, 169, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='targetUse'",
-          "rect": [59, 269, 50, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [59, 269, 50, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [59, 269, 50, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [59, 269, 50, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use id='targetUse'",
-          "rect": [34, 169, 50, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [34, 169, 50, 200],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use id='targetUse'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g id='targetUse'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.png
deleted file mode 100644
index ac4d7260..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.txt
deleted file mode 100644
index 501e2a5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 68, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGImage image",
-          "rect": [9, 69, 400, 400],
-          "reason": "image"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [9, 69, 400, 400],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGImage image",
-      "reason": "image"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.png
deleted file mode 100644
index 179d5f6..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.txt
deleted file mode 100644
index f3c82f8..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 50, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [27, 67, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [27, 67, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [27, 67, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [13, 205, 92, 91],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [13, 205, 92, 91],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [13, 205, 92, 91],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt
deleted file mode 100644
index 4f74cb3..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 68, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [9, 69, 400, 400],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [209, 269, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [209, 269, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [9, 269, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='targetUse'",
-          "rect": [9, 69, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [9, 69, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use id='targetUse'",
-          "rect": [9, 69, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect1'",
-          "rect": [9, 69, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect1'",
-          "rect": [9, 69, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect1'",
-          "rect": [9, 69, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [59, 269, 50, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [59, 269, 50, 200],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect1'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use id='targetUse'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect1'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g id='targetUse'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect1'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt
deleted file mode 100644
index 92844b53..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 68, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [9, 69, 400, 400],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [9, 69, 400, 400],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='targetSymbol'",
-          "rect": [9, 69, 400, 400],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [209, 269, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [9, 69, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [59, 269, 50, 50],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='targetSymbol'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.png
deleted file mode 100644
index 682d773..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt
deleted file mode 100644
index 92766785..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 50, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [45, 85, 328, 328],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [45, 85, 328, 328],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [45, 85, 328, 328],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
-          "rect": [45, 85, 328, 328],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [16, 57, 136, 137],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [18, 209, 82, 83],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [18, 209, 82, 83],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [18, 209, 82, 83],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
-          "rect": [18, 209, 82, 83],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.png
deleted file mode 100644
index 179d5f6..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt
deleted file mode 100644
index 2129a7899..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 50, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [27, 67, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [27, 67, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [27, 67, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
-          "rect": [27, 67, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [16, 57, 136, 137],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [13, 205, 92, 91],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [13, 205, 92, 91],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [13, 205, 92, 91],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
-          "rect": [13, 205, 92, 91],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/remove-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/remove-outline-property-on-root-expected.txt
deleted file mode 100644
index ee2f9aa9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/remove-outline-property-on-root-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 784, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [-2, -2, 120, 120],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt
deleted file mode 100644
index 34fccca..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt
+++ /dev/null
@@ -1,129 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 378],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='modify'",
-          "rect": [10, 62, 306, 378],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [10, 62, 306, 378],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='modify'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/remove-tspan-from-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/remove-tspan-from-text-expected.txt
deleted file mode 100644
index d02155a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/remove-tspan-from-text-expected.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 258],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 258],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 258],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 258],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 62, 306, 258],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 62, 306, 258],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 62, 306, 258],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='remove'",
-          "rect": [10, 62, 306, 258],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [10, 62, 306, 258],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='remove'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt
deleted file mode 100644
index 6563260..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [9, 12, 48, 30],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [9, 12, 48, 30],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGText text id='t'",
-          "rect": [9, 12, 48, 30],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGText text id='t'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Hello'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt
deleted file mode 100644
index 6563260..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [9, 12, 48, 30],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [9, 12, 48, 30],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGText text id='t'",
-          "rect": [9, 12, 48, 30],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGText text id='t'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Hello'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-shadow-expected.png
deleted file mode 100644
index a168dd3..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
deleted file mode 100644
index 4337e0be..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
deleted file mode 100644
index 9878f365..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ /dev/null
@@ -1,106 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [1026, 1016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [24, 991, 737, 21],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [177, 991, 202, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [432, 991, 176, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline A",
-          "rect": [378, 987, 55, 29],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [383, 991, 45, 21],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [427, 991, 6, 21],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [378, 991, 6, 21],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'pservers-pattern-01-b \u2190'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline A",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'index'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u2192 script-handle-01-b'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.png
deleted file mode 100644
index 7e3653f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.txt
deleted file mode 100644
index 9977b5f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='revealer'",
-          "rect": [9, 151, 200, 100],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='revealer'",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.png
deleted file mode 100644
index 50c3177..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.txt
deleted file mode 100644
index 2c12db07..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 50, 602, 422],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage img",
-          "rect": [9, 51, 420, 420],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage img",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.png
deleted file mode 100644
index aa3d62632..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.txt
deleted file mode 100644
index 510fcc0..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.txt
+++ /dev/null
@@ -1,2186 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [389, 37, 316, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [389, 37, 316, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [389, 37, 316, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [389, 37, 316, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRound'",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [262, 278, 303, 303],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [262, 278, 303, 303],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [262, 278, 303, 303],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [262, 278, 303, 303],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectRound'",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [506, 232, 238, 161],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [506, 232, 238, 161],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [506, 232, 238, 161],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [506, 232, 238, 161],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [6, 256, 238, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [6, 256, 238, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [6, 256, 238, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [6, 256, 238, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectTriangle'",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupTriangle'",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'",
-          "rect": [15, 292, 211, 35],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 292, 211, 35],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 292, 211, 35],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 292, 211, 35],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [15, 292, 211, 35],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [15, 292, 211, 35],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='contentTabGroupTriangle0'",
-          "rect": [15, 292, 211, 35],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [31, 404, 188, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [23, 146, 188, 10],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [37, 404, 176, 98],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [29, 147, 176, 97],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [39, 404, 172, 96],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [31, 146, 172, 96],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [37, 6, 160, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [37, 6, 160, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [37, 6, 160, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [37, 6, 160, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRect'",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 292, 148, 23],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 292, 148, 23],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [15, 292, 148, 23],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [15, 292, 148, 23],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [7, 34, 148, 23],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [7, 34, 148, 23],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [7, 34, 148, 23],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [7, 34, 148, 23],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__1'",
-          "rect": [59, 256, 64, 31],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__0'",
-          "rect": [506, 232, 64, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__0'",
-          "rect": [389, 37, 64, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
-          "rect": [362, 278, 63, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__1'",
-          "rect": [413, 329, 60, 60],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__1'",
-          "rect": [566, 232, 60, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__1'",
-          "rect": [449, 37, 60, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-          "rect": [6, 256, 57, 31],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__2'",
-          "rect": [119, 256, 54, 31],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [394, 39, 54, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [394, 39, 54, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [394, 39, 54, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [511, 235, 54, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [511, 235, 54, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [511, 235, 54, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__3'",
-          "rect": [500, 416, 53, 53],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [64, 258, 53, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [64, 258, 53, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [64, 258, 53, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [64, 258, 53, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [64, 258, 53, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__2'",
-          "rect": [461, 377, 51, 52],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [571, 235, 50, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [571, 235, 50, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [571, 235, 50, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [454, 39, 50, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [454, 39, 50, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [454, 39, 50, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__3'",
-          "rect": [666, 232, 49, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__3'",
-          "rect": [549, 37, 49, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [370, 286, 48, 47],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [370, 286, 48, 47],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [370, 286, 48, 47],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
-          "rect": [622, 232, 48, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__2'",
-          "rect": [505, 37, 48, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [11, 258, 46, 27],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [11, 258, 46, 27],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [11, 258, 46, 27],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [11, 258, 46, 27],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [11, 258, 46, 27],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [421, 336, 45, 45],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [421, 336, 45, 45],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [421, 336, 45, 45],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [124, 258, 44, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [124, 258, 44, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [124, 258, 44, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [124, 258, 44, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [124, 258, 44, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__3'",
-          "rect": [169, 256, 42, 31],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [671, 235, 39, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [671, 235, 39, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [671, 235, 39, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [554, 39, 39, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [554, 39, 39, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [554, 39, 39, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [508, 424, 37, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [508, 424, 37, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [508, 424, 37, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [510, 39, 37, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [510, 39, 37, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [510, 39, 37, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [469, 385, 36, 35],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [469, 385, 36, 35],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [469, 385, 36, 35],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [628, 235, 36, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [628, 235, 36, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [628, 235, 36, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [174, 258, 32, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [174, 258, 32, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [174, 258, 32, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [174, 258, 32, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [174, 258, 32, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__0'",
-          "rect": [178, 6, 19, 64],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__1'",
-          "rect": [178, 66, 19, 60],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__3'",
-          "rect": [178, 166, 19, 49],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__2'",
-          "rect": [178, 122, 19, 48],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [181, 11, 14, 54],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [181, 11, 14, 54],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [181, 11, 14, 54],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [181, 71, 14, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [181, 71, 14, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [181, 71, 14, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [181, 171, 14, 39],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [181, 171, 14, 39],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [181, 171, 14, 39],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [181, 128, 14, 36],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [181, 128, 14, 36],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [181, 128, 14, 36],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__1'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Geodata'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Browser'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Download'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Folder'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Your'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Account'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__0_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Help'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox '& Info'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__1'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Biography'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__0_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Portrait'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Relations'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupTriangle'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Download'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Folder'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is oversize content that can be'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'hidden on tab-change'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Your'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Account'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Help'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox '& Info'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Geodata'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Browser'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='contentTabGroupTriangle0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is a tabgroup with triangular tab corners'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'and a double line tab. (use \"\\n\" as a line separator)'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Click on the second tab to see oversize content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Biography'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__0_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Relations'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Portrait'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Biography'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__0_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Portrait'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Relations'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Relations'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Portrait'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Biography'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-dom-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-dom-removal-expected.txt
deleted file mode 100644
index 76d5931..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-dom-removal-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='objectsToRemove'",
-          "rect": [0, 0, 216, 129],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 111, 166, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [50, 111, 166, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 20, 20],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='objectsToRemove'",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-mask-update-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-mask-update-expected.txt
deleted file mode 100644
index 5c9fb177..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-mask-update-expected.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 2, 46, 23],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 2, 46, 23],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGText text id='text1'",
-          "rect": [10, 2, 46, 23],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 32, 43, 23],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text id='text2'",
-          "rect": [10, 32, 43, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 32, 43, 18],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text1'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text2'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.png
deleted file mode 100644
index f3c03dca..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.txt
deleted file mode 100644
index 0da7d71..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 0, 551, 118],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text id='bounce'",
-          "rect": [80, 0, 551, 118],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [30, 0, 404, 60],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text id='bounce'",
-          "rect": [30, 0, 404, 60],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text id='bounce'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Repaint me!'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text id='bounce'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Repaint me!'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale-expected.txt
deleted file mode 100644
index ac48b84..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale-expected.txt
+++ /dev/null
@@ -1,424 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='text2g'",
-          "rect": [0, 63, 402, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g id='text1g'",
-          "rect": [0, 13, 402, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='text3g'",
-          "rect": [0, 113, 402, 87],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 114, 194, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 114, 194, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 114, 194, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [0, 114, 194, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 114, 194, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 14, 194, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 14, 194, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 14, 194, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [0, 14, 194, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 14, 194, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [210, 13, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [210, 113, 100, 87],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [210, 113, 100, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [210, 13, 100, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [310, 114, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [310, 114, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [310, 114, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [310, 14, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [310, 14, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [310, 14, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [210, 113, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [210, 13, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='text3g'",
-          "rect": [0, 3, 13, 4],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 3, 6, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 3, 6, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 3, 6, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [0, 3, 6, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 3, 6, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [6, 3, 4, 4],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [9, 3, 4, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [9, 3, 4, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [9, 3, 4, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [6, 3, 4, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [6, 3, 4, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='text1g'",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g id='text1g'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS '",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGForeignObject foreignObject",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGContainer g id='text2g'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGContainer g id='text3g'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS '",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGForeignObject foreignObject",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-selection-text-05-t-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-selection-text-05-t-expected.png
deleted file mode 100644
index 285567f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-selection-text-05-t-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-viewbox-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-viewbox-rescale-expected.txt
deleted file mode 100644
index 76cb637..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-viewbox-rescale-expected.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 143, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 143, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [59, 143, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [59, 143, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='inner2'",
-          "rect": [59, 143, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 43, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 43, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 43, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [59, 43, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [59, 43, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='inner1'",
-          "rect": [59, 43, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 2, 1],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 2, 1],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 0, 2, 1],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [0, 0, 2, 1],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 0, 2, 1],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='inner1'",
-          "rect": [0, 0, 2, 1],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGViewportContainer svg id='inner1'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "full"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='inner2'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "full"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt
deleted file mode 100644
index b033e18..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [808, 620],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [208, 14, 170, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='ttt'",
-          "rect": [208, 14, 170, 18],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [18, 194, 170, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='ttt'",
-          "rect": [18, 194, 170, 18],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text id='ttt'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Passes, if text is at 200x20'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt
deleted file mode 100644
index 8088331..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [200, 186, 256, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='ts'",
-          "rect": [200, 186, 256, 18],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [200, 186, 256, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [20, 6, 256, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='ts'",
-          "rect": [20, 6, 256, 18],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [20, 6, 256, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='ts'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'This text should be at visible at 200,200'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.png
deleted file mode 100644
index 90b553d7..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.txt
deleted file mode 100644
index 623db28..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [90, 116, 64, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text id='status'",
-          "rect": [90, 116, 64, 18],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [90, 116, 44, 18],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text id='status'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Passed'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-detach-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-detach-expected.png
deleted file mode 100644
index f90ee13..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-detach-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-event-handler-on-use-element-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-event-handler-on-use-element-expected.png
deleted file mode 100644
index 39342ee..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-event-handler-on-use-element-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-setAttribute-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-setAttribute-crash-expected.txt
deleted file mode 100644
index 54b0bd2f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/use-setAttribute-crash-expected.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow body",
-          "rect": [8, 8, 784, 204],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse svg:circle id='circle'",
-          "rect": [32, 32, 52, 52],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer svg:use id='use'",
-          "rect": [33, 33, 50, 50],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRoot svg:svg id='svg'",
-          "rect": [33, 33, 50, 50],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='symbol'",
-          "rect": [33, 33, 50, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGEllipse svg:circle id='circle'",
-          "rect": [7, 7, 27, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGEllipse svg:circle id='circle'",
-          "rect": [52, 52, 12, 12],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='symbol'",
-          "rect": [53, 53, 10, 10],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGEllipse svg:circle id='circle'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='symbol'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow body",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg:svg id='svg'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGEllipse svg:circle id='circle'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGContainer svg:use id='use'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='symbol'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGEllipse svg:circle id='circle'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.png
deleted file mode 100644
index 00d090fa..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.txt
deleted file mode 100644
index 775e8372..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.txt
+++ /dev/null
@@ -1,2054 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='Windows'",
-          "rect": [38, 81, 760, 454],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='Windows'",
-          "rect": [38, 92, 760, 443],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [37, 142, 551, 394],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarbigWindow'",
-          "rect": [37, 142, 551, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [37, 522, 551, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='bigWindow'",
-          "rect": [38, 143, 549, 392],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupbigWindow'",
-          "rect": [38, 143, 549, 392],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupbigWindow'",
-          "rect": [38, 143, 549, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [76, 181, 317, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarnestedWindow'",
-          "rect": [76, 181, 317, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [76, 405, 317, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='nestedWindow'",
-          "rect": [77, 182, 315, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupnestedWindow'",
-          "rect": [77, 182, 315, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupnestedWindow'",
-          "rect": [77, 182, 315, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='navWindow'",
-          "rect": [613, 81, 185, 169],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='decoGroupnavWindow'",
-          "rect": [613, 81, 185, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
-          "rect": [613, 81, 185, 159],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='decoGroupMinimizednavWindow'",
-          "rect": [613, 81, 185, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [623, 91, 176, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [76, 194, 176, 145],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarcolourPickerWindow'",
-          "rect": [76, 194, 176, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [623, 237, 176, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [76, 325, 176, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='navWindow'",
-          "rect": [624, 92, 174, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupnavWindow'",
-          "rect": [624, 92, 174, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='colourPickerWindow'",
-          "rect": [77, 195, 174, 143],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupcolourPickerWindow'",
-          "rect": [77, 195, 174, 143],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupcolourPickerWindow'",
-          "rect": [77, 195, 174, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [311, 376, 160, 145],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='textNavWindow'",
-          "rect": [632, 102, 160, 97],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarsmallWindow'",
-          "rect": [311, 376, 160, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [311, 507, 160, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='smallWindow'",
-          "rect": [312, 377, 158, 143],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupsmallWindow'",
-          "rect": [312, 377, 158, 143],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupsmallWindow'",
-          "rect": [312, 377, 158, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [248, 343, 145, 66],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarstatusWindow'",
-          "rect": [248, 343, 145, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='statusWindow'",
-          "rect": [249, 344, 143, 64],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupstatusWindow'",
-          "rect": [249, 344, 143, 64],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupstatusWindow'",
-          "rect": [249, 344, 143, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 327, 139, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [80, 327, 139, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [320, 399, 135, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 399, 135, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 399, 135, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 399, 135, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 399, 135, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 399, 135, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [320, 399, 135, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [320, 399, 135, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [320, 399, 135, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [320, 399, 135, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='textSmallWindow'",
-          "rect": [320, 399, 135, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 183, 132, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [80, 183, 132, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 407, 127, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [80, 407, 127, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [38, 475, 121, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [257, 365, 120, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [257, 365, 120, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [257, 365, 120, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [257, 365, 120, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [257, 365, 120, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [257, 365, 120, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='textStatusWindow'",
-          "rect": [257, 365, 120, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='minimalWindow'",
-          "rect": [39, 476, 119, 48],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupminimalWindow'",
-          "rect": [39, 476, 119, 48],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [43, 481, 112, 36],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [43, 481, 112, 36],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [43, 481, 112, 36],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [43, 481, 112, 36],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [43, 481, 112, 36],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [43, 481, 112, 36],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='textMinimalWindow'",
-          "rect": [43, 481, 112, 36],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [41, 525, 102, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [41, 525, 102, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [314, 509, 91, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [314, 509, 91, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [252, 345, 74, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [252, 345, 74, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [314, 379, 71, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [314, 379, 71, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 197, 67, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [80, 197, 67, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [41, 144, 59, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [41, 144, 59, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
-          "rect": [757, 94, 36, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [627, 239, 34, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [627, 239, 34, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [613, 81, 16, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [768, 93, 13, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [768, 93, 13, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [557, 144, 13, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [362, 183, 13, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [440, 379, 13, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [375, 345, 13, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [376, 183, 12, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [376, 183, 12, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [782, 94, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [782, 94, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [782, 94, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [782, 94, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [615, 99, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [615, 83, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [615, 83, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [571, 144, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [571, 144, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [454, 379, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [454, 379, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [235, 197, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [235, 197, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [222, 197, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [427, 387, 12, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [349, 192, 12, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [615, 123, 12, 3],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [617, 153, 11, 81],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [617, 153, 11, 81],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-          "rect": [769, 94, 11, 11],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-          "rect": [769, 94, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [769, 94, 11, 11],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [769, 94, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonbigWindow'",
-          "rect": [558, 145, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [558, 145, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonnestedWindow'",
-          "rect": [363, 184, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [363, 184, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonsmallWindow'",
-          "rect": [441, 380, 11, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [441, 380, 11, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonstatusWindow'",
-          "rect": [376, 346, 11, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [376, 346, 11, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [756, 102, 11, 4],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [756, 102, 11, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [545, 153, 11, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [209, 205, 11, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [363, 354, 11, 3],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonnestedWindow'",
-          "rect": [377, 184, 10, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [377, 184, 10, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-          "rect": [783, 95, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-          "rect": [783, 95, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [783, 95, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [783, 95, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-          "rect": [616, 100, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [616, 100, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-          "rect": [616, 84, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [616, 84, 10, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [616, 84, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonbigWindow'",
-          "rect": [572, 145, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [572, 145, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonsmallWindow'",
-          "rect": [455, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [455, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [455, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonsmallWindow'",
-          "rect": [428, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [428, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [428, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonnestedWindow'",
-          "rect": [350, 185, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [350, 185, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtoncolourPickerWindow'",
-          "rect": [236, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [236, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [236, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtoncolourPickerWindow'",
-          "rect": [223, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [223, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [783, 95, 10, 9],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [783, 95, 10, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-          "rect": [616, 116, 10, 9],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [616, 116, 10, 9],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [616, 116, 10, 9],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [572, 146, 10, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [350, 185, 10, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-          "rect": [757, 95, 9, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-          "rect": [757, 95, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [757, 95, 9, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [757, 95, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonbigWindow'",
-          "rect": [546, 146, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [546, 146, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonstatusWindow'",
-          "rect": [364, 346, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [364, 346, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [364, 346, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtoncolourPickerWindow'",
-          "rect": [210, 198, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [210, 198, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [210, 198, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [757, 95, 9, 9],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [757, 95, 9, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [546, 146, 9, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [377, 185, 9, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [-1, 20, 7, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [-1, 20, 7, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [-1, 20, 7, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [-1, 29, 7, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 22, 5, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 22, 5, 9],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGHiddenContainer symbol id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer symbol id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer symbol id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='Windows'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='navWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='textNavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This window should'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'contain navigation tools'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Click on button'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox ''Resize Navigation Window' for a'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'random resize of this Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Note that this window also'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'features a window decoration'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Statusbar'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='bigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is a big movable window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='nestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This window contains other windows'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='colourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupcolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Changing a colour changes background'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupcolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarcolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Colour Picker'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtoncolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtoncolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtoncolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='statusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='textStatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is a none-moveable'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'none-closeable status'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Status Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Nested middlesize Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='smallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='textSmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This window has a callback'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'function indicating mouse'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'movements in the statusbar'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'and alerting window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Callback function is active'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Small Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='minimalWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupminimalWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='textMinimalWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is a minimal window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'without title and status bar.'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'it is also not moveable'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupminimalWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Big Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='Windows'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g id='navWindow'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g id='decoGroupnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='decoGroupMinimizednavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Navigation Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-coords-viewattr-01-b-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-coords-viewattr-01-b-expected.png
deleted file mode 100644
index 7a4ac6c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-coords-viewattr-01-b-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-foreignObject-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-foreignObject-expected.png
deleted file mode 100644
index 3078cd64..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-foreignObject-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table-cell-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table-cell-collapsed-border-expected.txt
deleted file mode 100644
index e0f1112..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table-cell-collapsed-border-expected.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [3, 260, 441, 110],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [3, 162, 441, 108],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [3, 360, 441, 105],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 60, 436, 108],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD id='t3'",
-          "rect": [225, 265, 112, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD id='t1'",
-          "rect": [225, 65, 112, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD id='t2'",
-          "rect": [8, 265, 110, 100],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCell TD id='t1'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCell TD id='t2'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCell TD id='t3'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table-cell-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table-cell-move-expected.txt
deleted file mode 100644
index 8a6ac9e..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table-cell-move-expected.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 200, 60, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 140, 60, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 320, 60, 60],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 260, 60, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 200, 60, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 140, 60, 60],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTableCell TD id='s'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table-collapsed-border-expected.txt
deleted file mode 100644
index 023ebc2f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table-collapsed-border-expected.txt
+++ /dev/null
@@ -1,377 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTable TABLE",
-          "rect": [8, 182, 110, 76],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableSection TBODY",
-          "rect": [8, 182, 110, 76],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR id='r2'",
-          "rect": [8, 210, 110, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE",
-          "rect": [8, 96, 101, 76],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableSection TBODY",
-          "rect": [8, 96, 101, 76],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 316, 101, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 268, 101, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 144, 101, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 96, 101, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 296, 101, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR id='r'",
-          "rect": [8, 124, 101, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE id='t'",
-          "rect": [8, 10, 97, 76],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 58, 97, 28],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 10, 97, 28],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 38, 97, 20],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD id='d2'",
-          "rect": [22, 210, 92, 20],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [22, 316, 83, 24],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [22, 272, 83, 24],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [22, 144, 83, 24],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [22, 100, 83, 24],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='d3'",
-          "rect": [22, 296, 83, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='d'",
-          "rect": [22, 124, 83, 20],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 297, 77, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 125, 77, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 317, 51, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 145, 51, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 277, 43, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 105, 43, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 211, 34, 18],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutTable TABLE",
-          "rect": [79, 268, 30, 76],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [12, 210, 10, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [12, 124, 10, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [17, 211, 4, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [17, 125, 4, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTableCell TD id='d'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTableCell TD id='d2'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTable TABLE id='t'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR id='r'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'sit amet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR id='r2'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD id='d3'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'ipsum dolor'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'sit amet'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table-shrink-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table-shrink-row-repaint-expected.txt
deleted file mode 100644
index da19063..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table-shrink-row-repaint-expected.txt
+++ /dev/null
@@ -1,465 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 848],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 848, 785, 200],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutTableCell TD id='resizeMe'",
-          "rect": [8, 115, 769, 205],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 980, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 920, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 860, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 800, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 780, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 740, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 720, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 680, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 660, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 620, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 600, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 560, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 540, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 500, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 480, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 440, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 420, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 380, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 360, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 320, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 300, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 240, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 180, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 120, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 1001, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 941, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 881, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 821, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 801, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 741, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 681, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 621, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 761, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 701, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 641, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 581, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 561, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 521, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 501, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 461, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 441, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 401, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 381, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 341, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 321, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 261, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 201, 8, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 141, 8, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutTableCell TD id='resizeMe'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '5'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '6'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '7'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '8'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '9'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '10'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '11'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '12'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '13'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt
deleted file mode 100644
index 478d197..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 8, 114, 54],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD id='foo'",
-          "rect": [10, 10, 56, 50],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='blockDiv'",
-          "rect": [90, 30, 20, 20],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [90, 30, 12, 18],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCell TD id='foo'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='blockDiv'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.txt
deleted file mode 100644
index 53b4af6..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COL id='target'",
-          "rect": [8, 26, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [72, 94],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COL id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt
deleted file mode 100644
index 53b4af6..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COL id='target'",
-          "rect": [8, 26, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [72, 94],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COL id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.txt
deleted file mode 100644
index 0ea67829..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COL id='target'",
-          "rect": [8, 26, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [72, 94],
-      "bounds": [59, 64],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [133, 94],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COL id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt
deleted file mode 100644
index 0ea67829..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COL id='target'",
-          "rect": [8, 26, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [72, 94],
-      "bounds": [59, 64],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [133, 94],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COL id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.txt
deleted file mode 100644
index b30e988..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COLGROUP id='target'",
-          "rect": [8, 26, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD id='target'",
-      "position": [72, 94],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COLGROUP id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt
deleted file mode 100644
index b30e988..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COLGROUP id='target'",
-          "rect": [8, 26, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD id='target'",
-      "position": [72, 94],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COLGROUP id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.txt
deleted file mode 100644
index e7a75d7..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableRow TR id='target'",
-      "position": [8, 94],
-      "bounds": [186, 64],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR id='target'",
-          "rect": [0, 0, 186, 64],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [64, 0],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt
deleted file mode 100644
index e7a75d7..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableRow TR id='target'",
-      "position": [8, 94],
-      "bounds": [186, 64],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR id='target'",
-          "rect": [0, 0, 186, 64],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [64, 0],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.txt
deleted file mode 100644
index 933118c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR id='target'",
-          "rect": [8, 94, 186, 64],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [72, 94],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.txt
deleted file mode 100644
index 933118c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR id='target'",
-          "rect": [8, 94, 186, 64],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [72, 94],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt
deleted file mode 100644
index d1f8357..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableSection TBODY id='target'",
-      "position": [8, 26],
-      "bounds": [186, 134],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableSection TBODY id='target'",
-          "rect": [0, 0, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableRow TR",
-      "position": [0, 68],
-      "bounds": [186, 64],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [64, 0],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt
deleted file mode 100644
index d1f8357..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableSection TBODY id='target'",
-      "position": [8, 26],
-      "bounds": [186, 134],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableSection TBODY id='target'",
-          "rect": [0, 0, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableRow TR",
-      "position": [0, 68],
-      "bounds": [186, 64],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [64, 0],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.txt
deleted file mode 100644
index 307c2ce0..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableSection TBODY id='target'",
-      "position": [8, 26],
-      "bounds": [186, 134],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableSection TBODY id='target'",
-          "rect": [0, 0, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [64, 68],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt
deleted file mode 100644
index 307c2ce0..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableSection TBODY id='target'",
-      "position": [8, 26],
-      "bounds": [186, 134],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableSection TBODY id='target'",
-          "rect": [0, 0, 186, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [64, 68],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt
deleted file mode 100644
index 45f854fd..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt
+++ /dev/null
@@ -1,114 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [0, 52, 106, 238],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [0, 292, 106, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [0, 100, 106, 190],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [0, 102, 106, 46],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 52, 102, 238],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 292, 102, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 102, 102, 46],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 401, 46, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 162, 46, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 116, 46, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 67, 46, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ROW1'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ROW2'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt
deleted file mode 100644
index d2a137f0..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 52, 102, 476],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 281, 63, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 91, 63, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'MIDDLE'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-row-repaint-expected.txt
deleted file mode 100644
index b97fae5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-row-repaint-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 102, 102, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 193, 63, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 143, 63, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'MIDDLE'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-in-relative-positioned-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-in-relative-positioned-inline-expected.txt
deleted file mode 100644
index a9312aa..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-in-relative-positioned-inline-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [108, 8, 684, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 7, 200, 102],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='target'",
-          "rect": [8, 8, 200, 100],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN id='target'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.png
deleted file mode 100644
index a843a3e..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.txt
deleted file mode 100644
index 714fd9a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='to-be-changed'",
-          "rect": [18, 128, 269, 36],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 128, 256, 36],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 128, 84, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [295, 102, 15, 400],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='to-be-changed'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'After change'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.png
deleted file mode 100644
index 1848b2b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.txt
deleted file mode 100644
index 9065a7b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x562
-      LayoutBlockFlow {P} at (0,0) size 784x36
-        LayoutText {#text} at (0,0) size 177x18
-          text run at (0,0) width 177: "This is a regression test for "
-        LayoutInline {I} at (0,0) size 721x36
-          LayoutInline {A} at (0,0) size 354x18 [color=#0000EE]
-            LayoutText {#text} at (176,0) size 354x18
-              text run at (176,0) width 354: "http://bugzilla.opendarwin.org/show_bug.cgi?id=7301"
-          LayoutText {#text} at (529,0) size 721x36
-            text run at (529,0) width 5: " "
-            text run at (533,0) width 188: "Text shadow does not repaint"
-            text run at (0,18) width 58: "correctly"
-        LayoutText {#text} at (57,18) size 5x18
-          text run at (57,18) width 5: "."
-      LayoutBlockFlow {DIV} at (30,84) size 724x22
-        LayoutInline {SPAN} at (0,0) size 200x22 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 200x22
-            text run at (0,0) width 200: "Lorem ipsum dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,136) size 724x22
-        LayoutInline {SPAN} at (0,0) size 200x22 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 200x22
-            text run at (0,0) width 200: "Lorem ipsum dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,188) size 724x22
-        LayoutText {#text} at (0,3) size 90x18
-          text run at (0,3) width 90: "Lorem ipsum "
-        LayoutInline {SPAN} at (0,0) size 100x22 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (89,0) size 100x22
-            text run at (89,0) width 100: "dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,240) size 724x22
-        LayoutInline {SPAN} at (0,0) size 97x22 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 97x22
-            text run at (0,0) width 97: "Lorem ipsum"
-        LayoutText {#text} at (96,3) size 93x18
-          text run at (96,3) width 93: " dolor sit amet"
-layer at (8,60) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,52) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.png
deleted file mode 100644
index 1848b2b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.txt
deleted file mode 100644
index 9065a7b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x562
-      LayoutBlockFlow {P} at (0,0) size 784x36
-        LayoutText {#text} at (0,0) size 177x18
-          text run at (0,0) width 177: "This is a regression test for "
-        LayoutInline {I} at (0,0) size 721x36
-          LayoutInline {A} at (0,0) size 354x18 [color=#0000EE]
-            LayoutText {#text} at (176,0) size 354x18
-              text run at (176,0) width 354: "http://bugzilla.opendarwin.org/show_bug.cgi?id=7301"
-          LayoutText {#text} at (529,0) size 721x36
-            text run at (529,0) width 5: " "
-            text run at (533,0) width 188: "Text shadow does not repaint"
-            text run at (0,18) width 58: "correctly"
-        LayoutText {#text} at (57,18) size 5x18
-          text run at (57,18) width 5: "."
-      LayoutBlockFlow {DIV} at (30,84) size 724x22
-        LayoutInline {SPAN} at (0,0) size 200x22 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 200x22
-            text run at (0,0) width 200: "Lorem ipsum dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,136) size 724x22
-        LayoutInline {SPAN} at (0,0) size 200x22 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 200x22
-            text run at (0,0) width 200: "Lorem ipsum dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,188) size 724x22
-        LayoutText {#text} at (0,3) size 90x18
-          text run at (0,3) width 90: "Lorem ipsum "
-        LayoutInline {SPAN} at (0,0) size 100x22 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (89,0) size 100x22
-            text run at (89,0) width 100: "dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,240) size 724x22
-        LayoutInline {SPAN} at (0,0) size 97x22 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 97x22
-            text run at (0,0) width 97: "Lorem ipsum"
-        LayoutText {#text} at (96,3) size 93x18
-          text run at (96,3) width 93: " dolor sit amet"
-layer at (8,60) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,52) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
deleted file mode 100644
index d12f195..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.txt
deleted file mode 100644
index 909ff1e..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [5, 5, 147, 38],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 135, 13],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [9, 24, 124, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [9, 11, 124, 13],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [133, 24, 15, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [133, 9, 15, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl TEXTAREA id='editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTextControl TEXTAREA id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutTextControl TEXTAREA id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox '------------------------------------------------------------'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/transform-inline-layered-child-expected.txt
deleted file mode 100644
index ddd4957..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/transform-inline-layered-child-expected.txt
+++ /dev/null
@@ -1,229 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='box'",
-          "rect": [66, 85, 168, 192],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [138, 359, 152, 182],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='child'",
-          "rect": [139, 359, 151, 181],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='box'",
-          "rect": [100, 100, 100, 162],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [300, 301, 80, 162],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='child'",
-          "rect": [300, 300, 80, 162],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='box'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN id='child'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'A B C'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'D E F'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'G H I'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'J K L'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'M N O'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'P Q R'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'S T U'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'V W X'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Y Z'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='box'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN id='child'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'A B C'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'D E F'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'G H I'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'J K L'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'M N O'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'P Q R'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'S T U'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'V W X'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Y Z'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/transform-layout-repaint-expected.txt
deleted file mode 100644
index 3b0de273..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/transform-layout-repaint-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [40, 50, 208, 118],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [52, 51, 42, 30],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-align-length1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-align-length1-expected.txt
deleted file mode 100644
index adb46fe6..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-align-length1-expected.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 800, 154],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [20, 0, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [120, 130, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [120, 100, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [0, 130, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [0, 100, 20, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-align-length2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-align-length2-expected.txt
deleted file mode 100644
index 65fb534..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-align-length2-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 800, 204],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [300, 0, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [0, 0, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [200, 80, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [200, 50, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-align1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-align1-expected.txt
deleted file mode 100644
index fd0c9422..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-align1-expected.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 800, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [20, 0, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [120, 80, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [120, 34, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [0, 80, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [0, 34, 20, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-align2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-align2-expected.txt
deleted file mode 100644
index c68eb83..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-align2-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 800, 246],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [300, 0, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [0, 0, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [200, 146, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [200, 100, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-rl-as-paint-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-rl-as-paint-container-expected.txt
deleted file mode 100644
index 3b13242..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/vertical-rl-as-paint-container-expected.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='target'",
-      "position": [8, 8],
-      "bounds": [600, 400],
-      "drawsContent": true,
-      "backfaceVisibility": "hidden",
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [519, 0, 82, 340],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsum dolor'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'sit amet,'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'consectetur'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'adipiscing elit.'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/window-resize-vertical-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/window-resize-vertical-writing-mode-expected.txt
deleted file mode 100644
index d7399e7..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/invalidation/window-resize-vertical-writing-mode-expected.txt
+++ /dev/null
@@ -1,427 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [913, 235],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 913, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 897, 219],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 897, 214],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [313, 0, 600, 500],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 600, 500],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [313, 235, 600, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [491, 8, 414, 484],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [491, 8, 414, 484],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'BBBB'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'CCCC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'DDDD'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'EEEE'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'FFFF'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'GGGG'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'HHHH'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'IIII JJJJ'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'KKKK'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'LLLL'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'MMMM'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'NNNN'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [913, 235],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [200, 0, 913, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 913, 235],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 913, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [208, 8, 897, 219],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 897, 219],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [208, 8, 897, 214],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 897, 214],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [513, 235, 600, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [513, 235, 400, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'BBBB'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'CCCC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'DDDD'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'EEEE'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'FFFF'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'GGGG'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'HHHH'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'IIII JJJJ'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'KKKK'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'LLLL'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'MMMM'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'NNNN'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [400, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 913, 235],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [-513, 0, 913, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [-505, 8, 897, 219],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [-505, 8, 897, 214],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 400, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 235, 400, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [47, 8, 345, 584],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [47, 8, 345, 565],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAA BBBB CCCC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'DDDD EEEE FFFF'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'GGGG HHHH IIII JJJJ'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'KKKK LLLL MMMM'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'NNNN'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [400, 0, 400, 600],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [447, 8, 345, 584],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [47, 8, 345, 584],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [447, 8, 345, 565],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [47, 8, 345, 565],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAA BBBB CCCC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'DDDD EEEE FFFF'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'GGGG HHHH IIII JJJJ'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'KKKK LLLL MMMM'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'NNNN'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/pagination/pagination-change-clip-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/pagination/pagination-change-clip-crash-expected.txt
deleted file mode 100644
index 693c3e5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/pagination/pagination-change-clip-crash-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 734],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 634, 785, 100],
-          "reason": "incremental"
-        }
-      ]
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='background'",
-      "position": [8, 426],
-      "bounds": [769, 300]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='background'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/printing/print-box-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/printing/print-box-shadow-expected.png
deleted file mode 100644
index 78f222d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/printing/print-box-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/roundedrects/circle-with-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/roundedrects/circle-with-shadow-expected.png
deleted file mode 100644
index 60aaf578..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/roundedrects/circle-with-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png
deleted file mode 100644
index 2674eef6..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-expected.png
deleted file mode 100644
index d89a157..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-expected.txt
deleted file mode 100644
index 0b7003a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x71
-  LayoutBlockFlow {HTML} at (0,0) size 800x71
-    LayoutBlockFlow {BODY} at (8,8) size 784x55
-      LayoutBlockFlow {DIV} at (0,0) size 24x55
-        LayoutText {#text} at (0,0) size 24x55
-          text run at (0,0) width 24: "x"
-      LayoutText {#text} at (24,0) size 24x55
-        text run at (24,0) width 24: "y"
-selection start: position 0 of child 0 {#text} of child 0 {DIV} of body
-selection end:   position 1 of child 1 {#text} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-rtl-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-rtl-expected.png
deleted file mode 100644
index b4ce93ab..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-rtl-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-rtl-expected.txt
deleted file mode 100644
index 1e15aa9b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-rtl-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x71
-  LayoutBlockFlow {HTML} at (0,0) size 800x71
-    LayoutBlockFlow {BODY} at (8,8) size 784x55
-      LayoutBlockFlow {DIV} at (0,0) size 784x55
-        LayoutBlockFlow {DIV} at (760,0) size 24x55
-          LayoutText {#text} at (0,0) size 24x55
-            text run at (0,0) width 24 RTL override: "x"
-        LayoutText {#text} at (736,0) size 24x55
-          text run at (736,0) width 24 RTL override: "y"
-selection start: position 0 of child 0 {#text} of child 1 {DIV} of child 0 {DIV} of body
-selection end:   position 1 of child 2 {#text} of child 0 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.txt
deleted file mode 100644
index cffbb62..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x145
-  LayoutBlockFlow {HTML} at (0,0) size 800x145
-    LayoutBlockFlow {BODY} at (8,16) size 784x121
-      LayoutBlockFlow {P} at (0,0) size 784x18
-        LayoutText {#text} at (0,0) size 348x18
-          text run at (0,0) width 348: "Passes if there are no overpainted selection highlights."
-      LayoutBlockFlow (anonymous) at (0,34) size 784x87
-        LayoutInline {SPAN} at (0,0) size 189x74
-          LayoutText {#text} at (0,3) size 189x74
-            text run at (0,3) width 96: "text"
-            text run at (95,3) width 94 RTL: "\x{645}\x{62A}\x{646}:"
-        LayoutText {#text} at (0,0) size 0x0
-selection start: position 5 of child 0 {#text} of child 2 {SPAN} of body
-selection end:   position 13 of child 0 {#text} of child 2 {SPAN} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png
deleted file mode 100644
index 84bbb0a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
deleted file mode 100644
index eea1972..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
deleted file mode 100644
index 6469e68..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x35
-  LayoutBlockFlow {HTML} at (0,0) size 800x35
-    LayoutBlockFlow {BODY} at (8,8) size 784x19
-      LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
-      LayoutText {#text} at (0,0) size 0x0
-layer at (11,11) size 125x13
-  LayoutBlockFlow {DIV} at (3,3) size 125x13
-    LayoutText {#text} at (0,0) size 66x13
-      text run at (0,0) width 66: "Hello, world!"
-selection start: position 0 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
-selection end:   position 13 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-150-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-150-expected.png
deleted file mode 100644
index 77e3dd99..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/disable-spinvalidation/paint/spellmarkers/document-markers-zoom-150-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting.https-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting.https-expected.txt
new file mode 100644
index 0000000..a4b6320
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/off-main-thread-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting.https-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Verify canvas tainting of fetched image in a Service Worker assert_equals: expected "finish" but got "failure:Result of url:https://www1.web-platform.test:8444/service-workers/service-worker/resources/fetch-access-control.py?PNGIMAGE&mode=cors&credentials=same-origin&url=https%3A%2F%2Fwww1.web-platform.test%3A8444%2Fservice-workers%2Fservice-worker%2Fresources%2Ffetch-access-control.py%3FPNGIMAGE%26ACAOrigin%3Dhttps%3A%2F%2Fweb-platform.test%3A8444  cross_origin:  must be TAINTED but NOT_TAINTED"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.png
index ba320740..f0d3620c4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background-expected.png
deleted file mode 100644
index 21b0b3d9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/spinvalidation/paint/invalidation/composited-overflow-with-borderbox-background-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png
deleted file mode 100644
index 372c2024..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png
deleted file mode 100644
index 7d328184..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/masks/mask-with-removed-filters-expected.png b/third_party/WebKit/LayoutTests/platform/win/compositing/masks/mask-with-removed-filters-expected.png
index 8079d94b..a469aba 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/masks/mask-with-removed-filters-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/masks/mask-with-removed-filters-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/tiled-mask-expected.png b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/tiled-mask-expected.png
index 005e10d..c79b681 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/tiled-mask-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/tiled-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/text-on-scaled-surface-expected.png b/third_party/WebKit/LayoutTests/platform/win/compositing/text-on-scaled-surface-expected.png
new file mode 100644
index 0000000..7dad5c3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/text-on-scaled-surface-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-mask-video-ratio-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-mask-video-ratio-expected.png
index 4959247..3bb34d3 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-mask-video-ratio-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-mask-video-ratio-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-mask-video-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-mask-video-shadow-expected.png
index 4ad5437..86f6aca 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-mask-video-shadow-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/borders/border-radius-mask-video-shadow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/color-matching/image-color-matching-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/color-matching/image-color-matching-expected.png
deleted file mode 100644
index 27d6eae..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/color-matching/image-color-matching-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/culling/scrolled-within-boxshadow-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/culling/scrolled-within-boxshadow-expected.png
deleted file mode 100644
index 317fef7d7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/culling/scrolled-within-boxshadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/culling/translated-boxshadow-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/culling/translated-boxshadow-expected.png
deleted file mode 100644
index 6e3f377..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/culling/translated-boxshadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/culling/unscrolled-within-boxshadow-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/culling/unscrolled-within-boxshadow-expected.png
deleted file mode 100644
index 317fef7d7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/culling/unscrolled-within-boxshadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.png
deleted file mode 100644
index 629be2fc2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.txt
deleted file mode 100644
index 6de5f39..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/direct-image-compositing-expected.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 756
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 785x756 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
-  LayoutBlockFlow {HTML} at (0,0) size 785x755.88
-    LayoutBlockFlow {BODY} at (8,21.44) size 769x118.44
-      LayoutBlockFlow {H1} at (0,0) size 769x37
-        LayoutText {#text} at (0,0) size 387x36
-          text run at (0,0) width 387: "Image optimisation in layers"
-      LayoutBlockFlow {P} at (0,58.44) size 769x60
-        LayoutText {#text} at (0,0) size 745x59
-          text run at (0,0) width 564: "This test exercises direct compositing of images with hardware acceleration. The visual results "
-          text run at (564,0) width 30: "using"
-          text run at (0,20) width 639: "ACCELERATED_COMPOSITING and regular TOT should be identical. Running this test manually with "
-          text run at (638,20) width 107: "the correct debug"
-          text run at (0,40) width 379: "options will show which elements are directly composited. See "
-        LayoutInline {A} at (0,0) size 291x19 [color=#0000EE]
-          LayoutText {#text} at (379,40) size 291x19
-            text run at (379,40) width 291: "https://bugs.webkit.org/show_bug.cgi?id=23361"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow (floating) {DIV} at (0,134.44) size 260x200
-        LayoutText {#text} at (150,0) size 101x79
-          text run at (150,0) width 101: "Basic image - no"
-          text run at (150,20) width 81: "style - can be"
-          text run at (150,40) width 44: "directly"
-          text run at (150,60) width 70: "composited"
-      LayoutBlockFlow (floating) {DIV} at (260,134.44) size 260x200
-        LayoutText {#text} at (160,0) size 97x79
-          text run at (160,0) width 97: "5px blue border"
-          text run at (160,20) width 87: "- can NOT be"
-          text run at (160,40) width 44: "directly"
-          text run at (160,60) width 70: "composited"
-      LayoutBlockFlow (floating) {DIV} at (0,334.44) size 260x200
-        LayoutText {#text} at (160,0) size 100x59
-          text run at (160,0) width 75: "margin - can"
-          text run at (160,20) width 100: "NOT be directly"
-          text run at (160,40) width 70: "composited"
-      LayoutBlockFlow (floating) {DIV} at (260,334.44) size 260x200
-        LayoutText {#text} at (150,0) size 104x59
-          text run at (150,0) width 104: "solid background"
-          text run at (150,20) width 98: "- can be directly"
-          text run at (150,40) width 70: "composited"
-      LayoutBlockFlow (floating) {DIV} at (0,534.44) size 260x200
-        LayoutText {#text} at (150,0) size 107x79
-          text run at (150,0) width 72: "background"
-          text run at (150,20) width 107: "image - can NOT"
-          text run at (150,40) width 63: "be directly"
-          text run at (150,60) width 70: "composited"
-      LayoutBlockFlow (floating) {DIV} at (260,534.44) size 260x200
-        LayoutText {#text} at (150,0) size 108x79
-          text run at (150,0) width 66: "rotated but"
-          text run at (150,20) width 108: "otherwise no style"
-          text run at (150,40) width 98: "- can be directly"
-          text run at (150,60) width 70: "composited"
-layer at (8,156) size 150x150
-  LayoutImage (floating) {IMG} at (0,0) size 150x150
-layer at (268,156) size 160x160
-  LayoutImage (floating) {IMG} at (0,0) size 160x160 [border: (5px solid #0000FF)]
-layer at (13,361) size 150x150
-  LayoutImage (floating) {IMG} at (5,5) size 150x150
-layer at (268,356) size 150x150
-  LayoutImage (floating) {IMG} at (0,0) size 150x150 [bgcolor=#808080]
-layer at (8,556) size 150x150 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
-  LayoutImage (floating) {IMG} at (0,0) size 150x150 [bgcolor=#FFA500]
-layer at (268,556) size 150x150 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
-  LayoutImage (floating) {IMG} at (0,0) size 150x150
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
deleted file mode 100644
index 3810e8c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited'",
-      "position": [10, 10],
-      "transformOrigin": [-10, -10],
-      "bounds": [590, 210],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited'",
-      "position": [10, 260],
-      "transformOrigin": [-10, -10],
-      "bounds": [590, 210],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) DIV class='composited inner box'",
-      "position": [490, 110],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#0000FF"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/clipping-foreground-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/clipping-foreground-expected.txt
deleted file mode 100644
index 667ca01..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/clipping-foreground-expected.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 411x19
-          text run at (0,0) width 411: "The layering of the boxes should not be affected by overflow:hidden."
-      LayoutBlockFlow (anonymous) at (0,36) size 784x477
-        LayoutText {#text} at (320,305) size 4x19
-          text run at (320,305) width 4: " "
-        LayoutText {#text} at (0,0) size 0x0
-layer at (68,261) size 200x200 layerType: background only
-layer at (28,221) size 150x150
-  LayoutBlockFlow (positioned) zI: -1 {DIV} at (-40,-40) size 150x150 [color=#808080] [bgcolor=#C86464] [border: (2px solid #000000)]
-    LayoutText zI: -1 {#text} at (22,22) size 106x40
-      text run at (22,22) width 106: "Behind"
-layer at (50,303) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (22,82) size 100x100 [bgcolor=#008000] [border: (2px solid #000000)]
-    LayoutText {#text} at (22,22) size 55x41
-      text run at (22,22) width 55: "Behind"
-      text run at (22,43) width 53: "behind"
-layer at (68,261) size 200x200 layerType: foreground only
-  LayoutBlockFlow (relative positioned) {DIV} at (60,217) size 200x200 [color=#0000FF] [bgcolor=#FFFFFFCC] [border: (10px solid #000000)]
-    LayoutText {#text} at (30,30) size 126x81
-      text run at (30,30) width 60: "Box"
-      text run at (30,71) width 126: "contents"
-layer at (158,351) size 150x150
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (90,90) size 150x150 [color=#808080] [bgcolor=#C8C880] [border: (2px solid #000000)]
-    LayoutText zI: 1 {#text} at (22,22) size 87x81
-      text run at (22,22) width 33: "In"
-      text run at (22,63) width 87: "Front"
-layer at (392,104) size 200x200 clip at (402,114) size 180x180 scrollWidth 230 scrollHeight 230 layerType: background only
-layer at (352,64) size 150x150 backgroundClip at (402,114) size 180x180 clip at (402,114) size 180x180
-  LayoutBlockFlow (positioned) zI: -1 {DIV} at (-40,-40) size 150x150 [color=#808080] [bgcolor=#C86464] [border: (2px solid #000000)]
-    LayoutText zI: -1 {#text} at (22,22) size 106x40
-      text run at (22,22) width 106: "Behind"
-layer at (374,146) size 100x100 backgroundClip at (402,114) size 180x180 clip at (402,114) size 180x180
-  LayoutBlockFlow (positioned) {DIV} at (22,82) size 100x100 [bgcolor=#008000] [border: (2px solid #000000)]
-    LayoutText {#text} at (22,22) size 55x41
-      text run at (22,22) width 55: "Behind"
-      text run at (22,43) width 53: "behind"
-layer at (392,104) size 200x200 clip at (402,114) size 180x180 scrollWidth 230 scrollHeight 230 layerType: foreground only
-  LayoutBlockFlow (relative positioned) {DIV} at (384,60) size 200x200 [color=#0000FF] [bgcolor=#FFFFFFCC] [border: (10px solid #000000)]
-    LayoutText {#text} at (30,30) size 126x81
-      text run at (30,30) width 60: "Box"
-      text run at (30,71) width 126: "contents"
-layer at (482,194) size 150x150 backgroundClip at (402,114) size 180x180 clip at (402,114) size 180x180
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (90,90) size 150x150 [color=#808080] [bgcolor=#C8C880] [border: (2px solid #000000)]
-    LayoutText zI: 1 {#text} at (22,22) size 87x81
-      text run at (22,22) width 33: "In"
-      text run at (22,63) width 87: "Front"
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/composited-in-columns-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/composited-in-columns-expected.png
deleted file mode 100644
index 6f897b6..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/composited-in-columns-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/composited-in-columns-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/composited-in-columns-expected.txt
deleted file mode 100644
index d9d29ac3a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/composited-in-columns-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
- {
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='composited block'",
-      "position": [14, 164],
-      "bounds": [210, 60],
-      "drawsContent": true,
-      "backgroundColor": "#0000FF"
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='composited box'",
-      "position": [5, 5],
-      "bounds": [50, 50],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#008000"
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='composited block'",
-      "position": [272, 89],
-      "bounds": [210, 60],
-      "drawsContent": true,
-      "backgroundColor": "#0000FF"
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='composited box'",
-      "position": [5, 5],
-      "bounds": [50, 50],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#008000"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/layer-due-to-layer-children-deep-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/layer-due-to-layer-children-deep-expected.png
deleted file mode 100644
index 31c891b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/layer-due-to-layer-children-deep-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/video-fixed-scrolling-expected.png
deleted file mode 100644
index 3171b5f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/video-fixed-scrolling-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/video-opacity-overlay-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/video-opacity-overlay-expected.png
deleted file mode 100644
index ce82027..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/geometry/video-opacity-overlay-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
deleted file mode 100644
index a78e47d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow-expected.png
deleted file mode 100644
index acfc168..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/gestures/gesture-tapHighlight-with-box-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-alignment-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-alignment-expected.txt
deleted file mode 100644
index 00c4f95f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-alignment-expected.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x76
-  LayoutBlockFlow {HTML} at (0,0) size 800x76
-    LayoutBlockFlow {BODY} at (8,8) size 784x60
-      LayoutText {#text} at (0,0) size 766x39
-        text run at (0,0) width 567: "Simple test of composited iframe content. There should be a blue box with a gray background "
-        text run at (567,0) width 199: "inside the black border. The gray"
-        text run at (0,20) width 334: "background should fit perfectly within the block border "
-        text run at (334,20) width 84: "with no gaps. "
-      LayoutBR {BR} at (0,0) size 0x0
-      LayoutBR {BR} at (0,40) size 0x19
-layer at (100,100) size 440x340
-  LayoutIFrame (positioned) {IFRAME} at (100,100) size 440x340 [border: (20px solid #000000)]
-    layer at (0,0) size 400x300
-      LayoutView at (0,0) size 400x300
-    layer at (0,0) size 400x230
-      LayoutBlockFlow {HTML} at (0,0) size 400x230
-        LayoutBlockFlow {BODY} at (8,10) size 384x210 [bgcolor=#C0C0C0]
-    layer at (18,10) size 210x210
-      LayoutBlockFlow {DIV} at (10,0) size 210x210 [bgcolor=#0000FF]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-scroll-expected.png
deleted file mode 100644
index 1d36f1c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-scroll-expected.txt
deleted file mode 100644
index cd79b23a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/composited-iframe-scroll-expected.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x0
-  LayoutBlockFlow {HTML} at (0,0) size 800x0
-    LayoutBlockFlow {BODY} at (0,0) size 800x0
-layer at (120,120) size 200x200
-  LayoutBlockFlow (positioned) {DIV} at (120,120) size 200x200 [bgcolor=#FF0000]
-layer at (0,100) size 240x245
-  LayoutBlockFlow (positioned) {DIV} at (0,100) size 240x245
-    LayoutText {#text} at (0,0) size 0x0
-layer at (10,110) size 220x220
-  LayoutIFrame {IFRAME} at (10,10) size 220x220
-    layer at (0,0) size 200x200 scrollY 200.00 scrollHeight 400
-      LayoutView at (0,0) size 200x200
-    layer at (0,0) size 200x400 backgroundClip at (0,0) size 200x200 clip at (0,0) size 200x200
-      LayoutBlockFlow {HTML} at (0,0) size 200x400
-        LayoutBlockFlow {BODY} at (0,0) size 200x400
-          LayoutBlockFlow {DIV} at (0,0) size 200x200 [bgcolor=#FF0000]
-          LayoutBlockFlow {DIV} at (0,200) size 200x200 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/iframe-content-flipping-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/iframe-content-flipping-expected.png
deleted file mode 100644
index e12ad2f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/iframe-content-flipping-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/iframe-content-flipping-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/iframe-content-flipping-expected.txt
deleted file mode 100644
index 010a7d8c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/iframe-content-flipping-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x263
-  LayoutBlockFlow {HTML} at (0,0) size 800x263
-    LayoutBlockFlow {BODY} at (8,8) size 784x247
-      LayoutText {#text} at (0,0) size 0x0
-layer at (28,28) size 202x202
-  LayoutIFrame {IFRAME} at (20,20) size 202x202 [border: (1px solid #000000)]
-    layer at (0,0) size 200x200 scrollHeight 400
-      LayoutView at (0,0) size 200x200
-    layer at (0,0) size 200x400 backgroundClip at (0,0) size 200x200 clip at (0,0) size 200x200
-      LayoutBlockFlow {HTML} at (0,0) size 200x400
-        LayoutBlockFlow {BODY} at (0,0) size 200x400
-    layer at (0,0) size 200x200
-      LayoutBlockFlow {DIV} at (0,0) size 200x200 [bgcolor=#008000]
-    layer at (0,200) size 200x200 backgroundClip at (0,0) size 200x200 clip at (0,0) size 200x200
-      LayoutBlockFlow {DIV} at (0,200) size 200x200 [bgcolor=#FF0000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/invisible-nested-iframe-show-expected.txt
deleted file mode 100644
index f11cd18..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/iframes/invisible-nested-iframe-show-expected.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutIFrame IFRAME",
-      "position": [-11, -11],
-      "bounds": [368, 218],
-      "drawsContent": true
-    },
-    {
-      "name": "Frame Overflow Controls Host Layer",
-      "position": [34, 34],
-      "bounds": [300, 150]
-    },
-    {
-      "name": "Frame Clipping Layer",
-      "bounds": [285, 150]
-    },
-    {
-      "name": "Frame Scrolling Layer"
-    },
-    {
-      "name": "Content Root Layer",
-      "bounds": [285, 193]
-    },
-    {
-      "name": "LayoutView #document",
-      "bounds": [285, 193],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutIFrame IFRAME",
-      "position": [8, 8],
-      "bounds": [252, 172],
-      "drawsContent": true
-    },
-    {
-      "name": "Frame Overflow Controls Host Layer",
-      "position": [1, 1],
-      "bounds": [250, 170]
-    },
-    {
-      "name": "Frame Clipping Layer",
-      "bounds": [250, 170]
-    },
-    {
-      "name": "Frame Scrolling Layer"
-    },
-    {
-      "name": "Content Root Layer",
-      "bounds": [250, 230]
-    },
-    {
-      "name": "LayoutView #document",
-      "bounds": [250, 230],
-      "drawsContent": true,
-      "backgroundColor": "#C0C0C0"
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
-      "position": [18, 10],
-      "bounds": [210, 210],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#0000FF"
-    },
-    {
-      "name": "Frame Vertical Scrollbar Layer",
-      "position": [285, 0],
-      "bounds": [15, 150]
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='box'",
-      "position": [18, 203],
-      "bounds": [210, 210],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#0000FF",
-      "transform": [
-        [1, 0, 0, 0],
-        [0, 1, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 1, 1]
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/img-layer-object-fit-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/img-layer-object-fit-expected.png
deleted file mode 100644
index 0f98aad..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/img-layer-object-fit-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/img-layer-object-fit-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/img-layer-object-fit-expected.txt
deleted file mode 100644
index 65d36b2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/img-layer-object-fit-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x156
-  LayoutBlockFlow {HTML} at (0,0) size 800x156
-    LayoutBlockFlow {BODY} at (8,8) size 784x140
-      LayoutBR {BR} at (100,15) size 0x19
-      LayoutBR {BR} at (100,50) size 0x19
-      LayoutBR {BR} at (100,85) size 0x19
-      LayoutBR {BR} at (100,120) size 0x19
-layer at (8,8) size 100x30
-  LayoutImage {IMG} at (0,0) size 100x30
-layer at (8,43) size 100x30
-  LayoutImage {IMG} at (0,35) size 100x30
-layer at (8,78) size 100x30
-  LayoutImage {IMG} at (0,70) size 100x30
-layer at (8,113) size 100x30
-  LayoutImage {IMG} at (0,105) size 100x30
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
deleted file mode 100644
index ebc73b8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-Even though the fixed-position element's container is nonscrollable, it should still be composited because one of its ancestors is scrolling.
-
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='scrollable bigBox'",
-      "position": [8, 72],
-      "bounds": [302, 302],
-      "shouldFlattenTransform": false,
-      "drawsContent": true
-    },
-    {
-      "name": "Scrolling Layer",
-      "position": [1, 1],
-      "bounds": [285, 285],
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [285, 800],
-      "drawsContent": true
-    },
-    {
-      "name": "Overflow Controls Host Layer",
-      "bounds": [302, 302]
-    },
-    {
-      "name": "Horizontal Scrollbar Layer",
-      "position": [1, 286],
-      "bounds": [285, 15]
-    },
-    {
-      "name": "Vertical Scrollbar Layer",
-      "position": [286, 1],
-      "bounds": [15, 285]
-    },
-    {
-      "name": "Scroll Corner Layer",
-      "position": [286, 286],
-      "bounds": [15, 15],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='fixed lime box'",
-      "position": [10, 100],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#00FF00"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/layers-inside-overflow-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/layers-inside-overflow-scroll-expected.png
deleted file mode 100644
index e4f918e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/layers-inside-overflow-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/lots-of-img-layers-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/lots-of-img-layers-expected.png
deleted file mode 100644
index a8afe292..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/lots-of-img-layers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/lots-of-img-layers-with-opacity-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/lots-of-img-layers-with-opacity-expected.png
deleted file mode 100644
index b9471ee1..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/lots-of-img-layers-with-opacity-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/masks/mask-with-removed-filters-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/masks/mask-with-removed-filters-expected.png
new file mode 100644
index 0000000..a469aba
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/masks/mask-with-removed-filters-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/clip-parent-reset-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/clip-parent-reset-expected.txt
deleted file mode 100644
index 408e517..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/clip-parent-reset-expected.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x186
-  LayoutBlockFlow {HTML} at (0,0) size 800x186
-    LayoutBlockFlow {BODY} at (8,8) size 784x170
-      LayoutBlockFlow (anonymous) at (0,150) size 784x20
-        LayoutText {#text} at (0,0) size 595x19
-          text run at (0,0) width 595: "This test verifies the clip parent of a layer gets correctly reset when it gained a non-composited clip."
-layer at (8,8) size 150x150 transparent
-  LayoutBlockFlow {DIV} at (0,0) size 150x150 [bgcolor=#FF0000]
-layer at (8,8) size 100x100 scrollWidth 200 scrollHeight 200
-  LayoutBlockFlow {DIV} at (0,0) size 100x100
-layer at (8,8) size 200x200 backgroundClip at (8,8) size 100x100 clip at (8,8) size 100x100
-  LayoutBlockFlow {DIV} at (0,0) size 200x200 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/mask-with-filter-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/mask-with-filter-expected.png
deleted file mode 100644
index 6e9aeb8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/mask-with-filter-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/mask-with-filter-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/mask-with-filter-expected.txt
deleted file mode 100644
index 3974072b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/mask-with-filter-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x229
-  LayoutBlockFlow {HTML} at (0,0) size 800x229
-    LayoutBlockFlow {BODY} at (8,8) size 784x213
-      LayoutText {#text} at (0,0) size 0x0
-layer at (108,8) size 208x208
-  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 208x208
-layer at (108,8) size 208x208 clip at (112,12) size 200x200 scrollWidth 500 scrollHeight 500
-  LayoutBlockFlow {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)]
-layer at (112,12) size 500x500 backgroundClip at (112,12) size 200x200 clip at (112,12) size 200x200
-  LayoutBlockFlow {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/overflow-compositing-descendant-expected.png
deleted file mode 100644
index 3e8e9d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/overflow-compositing-descendant-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/scroll-ancestor-update-expected.png
deleted file mode 100644
index 9bc0a5a4e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/scroll-ancestor-update-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/scrollbar-layer-placement-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/scrollbar-layer-placement-expected.png
deleted file mode 100644
index 125c5fc..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/scrollbar-layer-placement-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/tiled-mask-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/tiled-mask-expected.png
new file mode 100644
index 0000000..c79b681
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/overflow/tiled-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/perpendicular-layer-sorting-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/perpendicular-layer-sorting-expected.png
deleted file mode 100644
index 364c128..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/perpendicular-layer-sorting-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/perpendicular-layer-sorting-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/perpendicular-layer-sorting-expected.txt
deleted file mode 100644
index 8b13789..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/perpendicular-layer-sorting-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/reflections/load-video-in-reflection-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/reflections/load-video-in-reflection-expected.png
deleted file mode 100644
index cb9d3b0b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/reflections/load-video-in-reflection-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
deleted file mode 100644
index 3e23b3b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
deleted file mode 100644
index df49599..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/scrollbars/custom-composited-different-track-parts-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/scrollbars/custom-composited-different-track-parts-expected.png
deleted file mode 100644
index 2c7f7e5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/scrollbars/custom-composited-different-track-parts-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/self-painting-layers-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/self-painting-layers-expected.png
deleted file mode 100644
index cd3c05da..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/self-painting-layers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png
deleted file mode 100644
index 1a1d0fc..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/squashing/selection-repaint-with-gaps-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/squashing/selection-repaint-with-gaps-expected.txt
deleted file mode 100644
index ac59b00a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/squashing/selection-repaint-with-gaps-expected.txt
+++ /dev/null
@@ -1,135 +0,0 @@
-lorem ipsumlorem ipsumlorem ipsum
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='overlap'",
-      "position": [8, 8],
-      "bounds": [300, 500]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='item')",
-      "position": [15, 35],
-      "bounds": [100, 210],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 80, 38, 39],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='inline-block'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ipsum'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='overlap'",
-      "position": [8, 8],
-      "bounds": [300, 500]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='item')",
-      "position": [15, 35],
-      "bounds": [100, 210],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 80, 39, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 160, 38, 39],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='inline-block'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ipsum'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='item2' class='item'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='inline-block'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ipsum'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/squashing/squashing-print-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/squashing/squashing-print-expected.png
deleted file mode 100644
index 56b0d96..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/squashing/squashing-print-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/text-on-scaled-surface-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/text-on-scaled-surface-expected.png
new file mode 100644
index 0000000..7dad5c3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/text-on-scaled-surface-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/video-frame-size-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/video-frame-size-change-expected.txt
deleted file mode 100644
index 8cda59d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/video-frame-size-change-expected.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x245
-  LayoutBlockFlow {HTML} at (0,0) size 800x245
-    LayoutBlockFlow {BODY} at (8,16) size 784x221
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 457x19
-          text run at (0,0) width 457: "Tests decoding and rendering a video element that has a changing resolution."
-      LayoutBlockFlow (anonymous) at (0,36) size 784x185
-        LayoutText {#text} at (320,165) size 4x19
-          text run at (320,165) width 4: " "
-        LayoutText {#text} at (0,0) size 0x0
-layer at (8,52) size 320x180
-  LayoutVideo {VIDEO} at (0,0) size 320x180
-layer at (332,52) size 320x180
-  LayoutVideo {VIDEO} at (324,0) size 320x180
-layer at (8,52) size 320x180
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x180
-    LayoutBlockFlow {DIV} at (0,148) size 320x32
-layer at (8,52) size 320x138
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x138
-layer at (332,52) size 320x180
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x180
-    LayoutBlockFlow {DIV} at (0,148) size 320x32
-layer at (332,52) size 320x138
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x138
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/visibility/visibility-simple-video-layer-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/visibility/visibility-simple-video-layer-expected.png
deleted file mode 100644
index c40738eb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/visibility/visibility-simple-video-layer-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/webgl/webgl-nonpremultiplied-blend-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/webgl/webgl-nonpremultiplied-blend-expected.txt
deleted file mode 100644
index b4a2a21..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/compositing/webgl/webgl-nonpremultiplied-blend-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x261
-  LayoutBlockFlow {HTML} at (0,0) size 800x261
-    LayoutBlockFlow {BODY} at (8,8) size 784x245
-      LayoutText {#text} at (240,225) size 4x19
-        text run at (240,225) width 4: " "
-      LayoutText {#text} at (0,0) size 0x0
-layer at (28,28) size 200x200
-  LayoutHTMLCanvas {CANVAS} at (20,20) size 200x200 [bgcolor=#00008000]
-layer at (272,28) size 200x200
-  LayoutHTMLCanvas {CANVAS} at (264,20) size 200x200 [bgcolor=#00008000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/clipath/clip-path-with-background-and-box-behind-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/clipath/clip-path-with-background-and-box-behind-expected.png
deleted file mode 100644
index dbc6b93..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/clipath/clip-path-with-background-and-box-behind-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/clipath/clip-path-with-background-and-box-behind-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/clipath/clip-path-with-background-and-box-behind-expected.txt
deleted file mode 100644
index 0dce973..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/clipath/clip-path-with-background-and-box-behind-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x171
-  LayoutBlockFlow {HTML} at (0,0) size 800x171
-    LayoutBlockFlow {BODY} at (8,8) size 784x155
-      LayoutSVGRoot {svg} at (0,0) size 300x150
-        LayoutSVGResourceClipper {clipPath} [id="equitri"] [clipPathUnits=objectBoundingBox]
-          LayoutSVGPath {polygon} at (0,0) size 1x0.86 [fill={[type=SOLID] [color=#000000]}] [points="0.5 0 0 0.86 1 0.86 0.5 0"]
-      LayoutText {#text} at (0,0) size 0x0
-layer at (8,8) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (8,8) size 100x100 [bgcolor=#008000]
-layer at (8,8) size 100x100
-  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 100x100 [bgcolor=#FF0000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.png
deleted file mode 100644
index 34d0c0c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.txt
deleted file mode 100644
index 21f8ac6..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/4776765-expected.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [7, 43, 786, 62],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='div'",
-          "rect": [8, 84, 784, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='div'",
-          "rect": [8, 64, 1, 19],
-          "reason": "caret"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='div'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt
deleted file mode 100644
index f9024cd..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [1250, 585],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='shiftMe'",
-          "rect": [0, 0, 1500, 237],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='shiftMe'",
-          "rect": [-250, 0, 1500, 237],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
-          "rect": [704, 0, 700, 237],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
-          "rect": [454, 0, 700, 237],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
-          "rect": [0, 0, 700, 237],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
-          "rect": [-250, 0, 700, 237],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [1250, 0, 250, 585],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [704, 0, 214, 232],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [454, 0, 214, 232],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [0, 0, 214, 232],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [-250, 0, 214, 232],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [700, 217, 4, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [450, 217, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='shiftMe'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div-expected.png
deleted file mode 100644
index 03c93a3..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div-expected.txt
deleted file mode 100644
index c6943ad9..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/background-image-paint-invalidation-large-abspos-div-expected.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 3000.00 scrollHeight 4008
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 785x558
-  LayoutBlockFlow {HTML} at (0,0) size 785x558
-    LayoutBlockFlow {BODY} at (8,8) size 769x542
-      LayoutImage {IMG} at (0,0) size 489x537
-      LayoutText {#text} at (0,0) size 0x0
-layer at (8,8) size 100x4000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
-  LayoutBlockFlow (positioned) {DIV} at (8,8) size 100x4000
-scrolled to 0,3000
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/backgroundSizeRepaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/backgroundSizeRepaint-expected.txt
deleted file mode 100644
index 50e7ed17..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/backgroundSizeRepaint-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 319, 200, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 157, 200, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='b'",
-          "rect": [29, 359, 180, 20],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='a'",
-          "rect": [29, 197, 180, 20],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='a'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='b'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt
deleted file mode 100644
index 9500ea47..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) SPAN",
-          "rect": [162, 37, 278, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [162, 37, 278, 19],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN",
-          "rect": [324, 37, 277, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [324, 37, 277, 19],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) SPAN",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) SPAN",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/block-no-inflow-children-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/block-no-inflow-children-expected.txt
deleted file mode 100644
index e7d4848..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/block-no-inflow-children-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [0, 0, 58, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 0, 58, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'La la la la'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/block-selection-gap-stale-cache-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/block-selection-gap-stale-cache-expected.txt
deleted file mode 100644
index dd2559c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/block-selection-gap-stale-cache-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {DIV} at (0,0) size 784x100
-        LayoutBlockFlow {DIV} at (0,0) size 100x100
-        LayoutBR {BR} at (100,100) size 0x0
-      LayoutBlockFlow (anonymous) at (0,100) size 784x20
-        LayoutText {#text} at (0,0) size 4x19
-          text run at (0,0) width 4: " "
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/body-background-image-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/body-background-image-expected.txt
deleted file mode 100644
index 5fecb3b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/body-background-image-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 800, 600],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 240, 784, 288],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/border-radius-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/border-radius-repaint-expected.txt
deleted file mode 100644
index fadd8e7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/border-radius-repaint-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 245, 200, 88],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 83, 200, 88],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='b'",
-          "rect": [33, 299, 172, 20],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='a'",
-          "rect": [33, 137, 172, 20],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='a'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='b'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/border-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/border-repaint-glitch-expected.txt
deleted file mode 100644
index a42e135..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/border-repaint-glitch-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 413, 200, 24],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 251, 200, 24],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='b'",
-          "rect": [33, 403, 172, 20],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='a'",
-          "rect": [33, 241, 172, 20],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='a'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='b'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/box-inline-resize-expected.txt
deleted file mode 100644
index 0055b5f0..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/box-inline-resize-expected.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow H2",
-          "rect": [40, 107, 111, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [40, 107, 111, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow H2",
-          "rect": [8, 107, 111, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 107, 111, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 88, 32, 67],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG id='foo'",
-          "rect": [8, 88, 32, 32],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG id='foo'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow H2",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Chromium'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/box-shadow-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/box-shadow-dynamic-expected.txt
deleted file mode 100644
index fcbda12..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/box-shadow-dynamic-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [18, 72, 55, 75],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [18, 192, 55, 55],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-3509-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-3509-expected.txt
deleted file mode 100644
index b7bb3fd..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-3509-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='im'",
-          "rect": [11, 131, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 131, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='im'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-5699-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-5699-expected.txt
deleted file mode 100644
index 8cb3e45..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-5699-expected.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 136, 784, 68],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 184, 32, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 156, 32, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='d'",
-          "rect": [8, 150, 4, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 150, 4, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 136, 4, 19],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='d'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Hello'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6278-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6278-expected.txt
deleted file mode 100644
index b777bb7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6278-expected.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [10, 138, 292, 160],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [10, 303, 292, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 138, 289, 159],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [10, 138, 242, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [10, 323, 242, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='col1'",
-          "rect": [10, 353, 242, 20],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 138, 239, 179],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='target'",
-          "rect": [254, 138, 52, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='col1'",
-          "rect": [252, 138, 50, 215],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD id='col1'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Curabitur pretium, quam quis semper'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'malesuada, est libero feugiat libero, vel'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'fringilla orci nibh sed neque. Quisque eu'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'nulla non nisi molestie accumsan. Etiam'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'tellus urna, laoreet ac, laoreet non,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'suscipit sed, sapien. Phasellus vehicula,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'sem at posuere vehicula, augue nibh'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'molestie nisl, nec ullamcorper lacus ante'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'vulputate pede.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD id='target'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6388-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6388-expected.txt
deleted file mode 100644
index 9d86ba8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6388-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [8, 136, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 136, 100, 100],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6473-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6473-expected.txt
deleted file mode 100644
index 3f348d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-6473-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='allcontent'",
-          "rect": [8, 136, 784, 52],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) P",
-          "rect": [8, 152, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) P",
-          "rect": [8, 136, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 152, 69, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 136, 69, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='allcontent'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'SUCCESS'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.png
deleted file mode 100644
index 4129c1e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.txt
deleted file mode 100644
index 805268d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/bugzilla-7235-expected.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 156, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='t'",
-          "rect": [8, 176, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='p'",
-          "rect": [8, 156, 4, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 156, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN id='p'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='t'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
deleted file mode 100644
index 911d579b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ /dev/null
@@ -1,433 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 933],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='copyvideo'",
-          "rect": [569, 515, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'",
-          "rect": [569, 415, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-invideo'",
-          "rect": [569, 315, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-outvideo'",
-          "rect": [569, 165, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-invideo'",
-          "rect": [569, 115, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='copycanvas'",
-          "rect": [427, 515, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'",
-          "rect": [427, 415, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-incanvas'",
-          "rect": [427, 315, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-outcanvas'",
-          "rect": [427, 165, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-incanvas'",
-          "rect": [427, 115, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='copyimage'",
-          "rect": [285, 515, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-atopimage'",
-          "rect": [285, 415, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-inimage'",
-          "rect": [285, 315, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-outimage'",
-          "rect": [285, 165, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-inimage'",
-          "rect": [285, 115, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='copysolid color'",
-          "rect": [143, 515, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-atopsolid color'",
-          "rect": [143, 415, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-insolid color'",
-          "rect": [143, 315, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-outsolid color'",
-          "rect": [143, 165, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-insolid color'",
-          "rect": [143, 115, 80, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='xorvideo'",
-          "rect": [599, 565, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='lightervideo'",
-          "rect": [599, 465, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-outvideo'",
-          "rect": [599, 365, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-overvideo'",
-          "rect": [599, 265, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-atopvideo'",
-          "rect": [599, 215, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-overvideo'",
-          "rect": [599, 65, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='xorcanvas'",
-          "rect": [457, 565, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='lightercanvas'",
-          "rect": [457, 465, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'",
-          "rect": [457, 365, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-overcanvas'",
-          "rect": [457, 265, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'",
-          "rect": [457, 215, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-overcanvas'",
-          "rect": [457, 65, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='xorimage'",
-          "rect": [315, 565, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='lighterimage'",
-          "rect": [315, 465, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-outimage'",
-          "rect": [315, 365, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-overimage'",
-          "rect": [315, 265, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-atopimage'",
-          "rect": [315, 215, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-overimage'",
-          "rect": [315, 65, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='xorsolid color'",
-          "rect": [173, 565, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='lightersolid color'",
-          "rect": [173, 465, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-outsolid color'",
-          "rect": [173, 365, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'",
-          "rect": [173, 265, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-atopsolid color'",
-          "rect": [173, 215, 50, 40],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutHTMLCanvas CANVAS id='source-oversolid color'",
-          "rect": [173, 65, 50, 40],
-          "reason": "invalidate paint rectangle"
-        }
-      ]
-    },
-    {
-      "name": "LayoutVideo VIDEO id='video'",
-      "position": [15, 859],
-      "bounds": [150, 60]
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutFlexibleBox (relative positioned) DIV",
-      "position": [15, 859],
-      "bounds": [150, 60],
-      "drawsContent": true
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)",
-      "position": [15, 859],
-      "bounds": [150, 18],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-oversolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-overimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-overcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-overvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-insolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-inimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-incanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-invideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-outsolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-outimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-outcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-outvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-atopsolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-atopimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='source-atopvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-overimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-overcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-overvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-insolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-inimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-incanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-invideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-outsolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-outimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-outvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-atopsolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-atopimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='lightersolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='lighterimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='lightercanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='lightervideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='copysolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='copyimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='copycanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='copyvideo'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='xorsolid color'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='xorimage'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='xorcanvas'",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutHTMLCanvas CANVAS id='xorvideo'",
-      "reason": "invalidate paint rectangle"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-expected.png
deleted file mode 100644
index c2f7dbc..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-no-full-invalidation-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-no-full-invalidation-expected.png
deleted file mode 100644
index 029122fd..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/canvas-resize-no-full-invalidation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.png
deleted file mode 100644
index 6594da91..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.txt
deleted file mode 100644
index 1d5bf0d0..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-contenteditable-content-after-expected.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 48, 22, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 48, 15, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [30, 48, 7, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [23, 48, 7, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [23, 48, 7, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [15, 48, 7, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [15, 48, 7, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 48, 7, 19],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [8, 48, 7, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='editor'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'a'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'ab'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'abc'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
deleted file mode 100644
index a4f4f4b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt
deleted file mode 100644
index 9ec59101..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [381, 11, 1, 16],
-          "reason": "caret"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [378, 11, 1, 16],
-          "reason": "caret"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-outside-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-outside-block-expected.txt
deleted file mode 100644
index b8644c03..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-outside-block-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [791, 8, 1, 19],
-          "reason": "caret"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-subpixel-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-subpixel-expected.txt
deleted file mode 100644
index ea861c1f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-subpixel-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='target'",
-          "rect": [8, 8, 224, 22],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [10, 11, 201, 16],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='target'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.png
deleted file mode 100644
index d76702a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.txt
deleted file mode 100644
index d341afd0..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-with-composited-scroll-expected.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='scroller'",
-      "position": [8, 48],
-      "bounds": [100, 100],
-      "shouldFlattenTransform": false,
-      "drawsContent": true
-    },
-    {
-      "name": "Scrolling Layer",
-      "bounds": [100, 100],
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [205, 1022],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='text'",
-          "rect": [-1, 999, 207, 24],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [3, 1003, 200, 16],
-          "reason": "subtree"
-        }
-      ]
-    },
-    {
-      "name": "Overflow Controls Host Layer",
-      "bounds": [100, 100]
-    },
-    {
-      "name": "Horizontal Scrollbar Layer",
-      "position": [0, 100],
-      "bounds": [100, 0],
-      "drawsContent": true
-    },
-    {
-      "name": "Vertical Scrollbar Layer",
-      "position": [100, 0],
-      "bounds": [0, 100],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='text'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.png
deleted file mode 100644
index 5c754c5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.txt
deleted file mode 100644
index 5530feac..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/caret-with-transformation-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='div'",
-          "rect": [42, 36, 11, 18],
-          "reason": "caret"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='div'",
-          "rect": [324, 199, 11, 17],
-          "reason": "caret"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt
deleted file mode 100644
index 10ad675..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/change-text-content-and-background-color-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl (positioned) INPUT id='input'",
-          "rect": [8, 8, 244, 68],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [30, 30, 200, 24],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [30, 30, 45, 24],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl (positioned) INPUT id='input'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'NEW'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/clip-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/clip-with-layout-delta-expected.txt
deleted file mode 100644
index 08f31ad31..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/clip-with-layout-delta-expected.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV",
-          "rect": [108, 8, 100, 100],
-          "reason": "background"
-        },
-        {
-          "object": "LayoutBlockFlow SPAN id='t2' class='blue'",
-          "rect": [108, 8, 100, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 8, 100, 100],
-          "reason": "background"
-        },
-        {
-          "object": "LayoutBlockFlow SPAN id='t1'",
-          "rect": [8, 8, 100, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [108, 8, 4, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "background"
-    },
-    {
-      "object": "LayoutBlockFlow SPAN id='t1'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV",
-      "reason": "background"
-    },
-    {
-      "object": "LayoutBlockFlow SPAN id='t2' class='blue'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/clipped-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/clipped-relative-expected.txt
deleted file mode 100644
index f2edf81..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/clipped-relative-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='inner'",
-          "rect": [8, 74, 204, 232],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [8, 74, 204, 232],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='inner'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/column-rules-fixed-height-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/column-rules-fixed-height-expected.png
deleted file mode 100644
index 6ac4dc6..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/column-rules-fixed-height-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/column-rules-fixed-height-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/column-rules-fixed-height-expected.txt
deleted file mode 100644
index ed77b09..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/column-rules-fixed-height-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutMultiColumnSet (anonymous)",
-          "rect": [8, 52, 525, 315],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [8, 52, 310, 315],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutMultiColumnSet (anonymous)",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.png
deleted file mode 100644
index 94c5e0bd..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.txt
deleted file mode 100644
index 7a21c5a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/composited-table-row-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableRow TR",
-      "position": [8, 8],
-      "transformOrigin": [34.5, 11.5],
-      "bounds": [70, 24],
-      "drawsContent": true,
-      "backgroundColor": "#FF0000",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell TD id='target'",
-          "rect": [0, 0, 35, 23],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
deleted file mode 100644
index 66b89ff..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/become-overlay-composited-layer-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt
deleted file mode 100644
index 2c1913c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-Hi!
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 4021],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-          "rect": [425, 980, 360, 90],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-          "rect": [425, 980, 360, 90],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-          "rect": [425, 480, 360, 90],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-          "rect": [425, 480, 360, 90],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [425, 980, 19, 19],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [425, 980, 19, 19],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [425, 480, 19, 19],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [425, 480, 19, 19],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Hi!'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='abs'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Hi!'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
deleted file mode 100644
index 208e30d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 1016],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='foo'",
-      "position": [8, 8],
-      "bounds": [200, 1000],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#D3D3D3"
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
-      "position": [8, 0],
-      "bounds": [300, 654],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 500, 300, 150],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 508, 284, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 508, 269, 142],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 508, 29, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [285, 500, 15, 150],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'test1'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/newly-composited-on-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/newly-composited-on-scroll-expected.png
deleted file mode 100644
index 70a05c2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/newly-composited-on-scroll-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/newly-composited-on-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/newly-composited-on-scroll-expected.txt
deleted file mode 100644
index 139597f9..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/newly-composited-on-scroll-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt
deleted file mode 100644
index 5c1b5b89c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt
+++ /dev/null
@@ -1,112 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [1418, 1008],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "rect": [8, 8, 769, 110],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 118, 769, 55],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 63, 769, 55],
-          "reason": "geometry"
-        }
-      ]
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV",
-      "position": [8, 8],
-      "bounds": [1000, 1000]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='mv-tile')",
-      "position": [8, 8],
-      "bounds": [1000, 105],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-          "rect": [0, 110, 1000, 50],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-          "rect": [0, 55, 1000, 50],
-          "reason": "compositing update"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-          "rect": [0, 55, 100, 50],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-          "rect": [0, 0, 100, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='foo' class='mv-tile'",
-          "rect": [0, 0, 100, 50],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='foo' class='mv-tile'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
-      "reason": "compositing update"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/containing-block-position-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/containing-block-position-change-expected.txt
deleted file mode 100644
index 56b33fc..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/containing-block-position-change-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [158, 74, 50, 50],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [100, 74, 50, 50],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='t'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt
deleted file mode 100644
index d9652ff1..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/control-clip-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [9, 87, 198, 16],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 117, 184, 16],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [76, 116, 64, 18],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText (anonymous)",
-          "rect": [9, 87, 63, 16],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText (anonymous)",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'SUCCESS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'SUCCESS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-2-expected.txt
deleted file mode 100644
index ac8de219..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-2-expected.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='keep' class='item'",
-          "rect": [348, 88, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
-          "rect": [348, 88, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='keep' class='item'",
-          "rect": [88, 88, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='keep' class='item'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-3-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-3-expected.txt
deleted file mode 100644
index 785f0be5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-3-expected.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='keep_child'",
-          "rect": [508, 208, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='remove_child'",
-          "rect": [508, 88, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='keep_child'",
-          "rect": [408, 208, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='remove_child'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='remove' class='outer'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='keep_inner'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='abs_pos'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='keep_child'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-4-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-4-expected.txt
deleted file mode 100644
index 0acc4ff..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-4-expected.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='keep' class='item'",
-          "rect": [408, 88, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
-          "rect": [408, 88, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='keep' class='item'",
-          "rect": [208, 88, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [408, 88, 4, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [408, 88, 4, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [208, 88, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='node' class='outer'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='keep' class='item'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-expected.txt
deleted file mode 100644
index 216235d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/crbug-371640-expected.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='keep' class='item'",
-          "rect": [348, 88, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
-          "rect": [348, 88, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='keep' class='item'",
-          "rect": [88, 88, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [348, 88, 4, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [348, 88, 4, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [88, 88, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='keep' class='item'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/create-layer-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/create-layer-repaint-expected.txt
deleted file mode 100644
index 4c352c66..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/create-layer-repaint-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
-          "rect": [28, 56, 500, 50],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
-          "rect": [28, 56, 250, 50],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.png
deleted file mode 100644
index 5f2b794..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.txt
deleted file mode 100644
index a3fe3de..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/delete-into-nested-block-expected.txt
+++ /dev/null
@@ -1,115 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='two'",
-          "rect": [8, 147, 784, 41],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 167, 784, 21],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 147, 784, 21],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='one'",
-          "rect": [8, 127, 784, 21],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 167, 30, 20],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 127, 30, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 147, 27, 20],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 127, 26, 20],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='two'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='one'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'three'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/details-open-repaint-expected.txt
deleted file mode 100644
index 28dd4c89..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/details-open-repaint-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='details-content'",
-          "rect": [8, 72, 784, 22],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTextControl INPUT",
-          "rect": [8, 72, 173, 22],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [10, 75, 169, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutDetailsMarker DIV id='details-marker'",
-          "rect": [8, 56, 11, 11],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutDetailsMarker DIV id='details-marker'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='details-content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTextControl INPUT",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt
deleted file mode 100644
index df8e236..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [808, 585],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [10, 77, 102, 99],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [12, 74, 100, 102],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='target'",
-          "rect": [11, 75, 100, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [114, 74, 2, 102],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [14, 74, 2, 3],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt
deleted file mode 100644
index 2f1876c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV id='fixedTransformed'",
-      "position": [8, 88],
-      "contentsOpaque": true
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV id='fixedOverlapping'",
-      "position": [8, 88],
-      "bounds": [800, 600]
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV id='moveMe'",
-      "position": [150, 150],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#008000"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.png
deleted file mode 100644
index 054f8ce..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.txt
deleted file mode 100644
index 0bfeedd1..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/fixed-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='t'",
-          "rect": [8, 84, 100, 100],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='t'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-expected.txt
deleted file mode 100644
index 8f038da8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexbox/repaint-expected.txt
+++ /dev/null
@@ -1,155 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='content'",
-          "rect": [138, 128, 654, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [138, 128, 654, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [138, 128, 651, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='content'",
-          "rect": [148, 128, 644, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [148, 128, 644, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [148, 128, 640, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='content'",
-          "rect": [400, 128, 392, 160],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [400, 128, 392, 160],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='left'",
-          "rect": [8, 228, 392, 60],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [400, 128, 389, 159],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='left'",
-          "rect": [148, 128, 252, 160],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='left'",
-          "rect": [138, 128, 10, 100],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='left'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='content'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet. Nulla'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et magnis dis'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula. Sed volutpat,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed nulla. Nunc quis porta'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='left'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='content'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet. Nulla'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et magnis dis'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula. Sed volutpat, tellus'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed nulla. Nunc quis porta elit.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexbox/scrollbars-changed-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexbox/scrollbars-changed-expected.txt
deleted file mode 100644
index 758723d2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexbox/scrollbars-changed-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='dynamic' class='content'",
-          "rect": [0, 0, 185, 30],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='scroller'",
-          "rect": [185, 0, 15, 100],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 5, 15, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 5, 15, 15],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='dynamic' class='content'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'z'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.png
deleted file mode 100644
index 32c3ebd..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.txt
deleted file mode 100644
index cd7a020..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x552
-      LayoutBlockFlow {P} at (0,0) size 784x40
-        LayoutText {#text} at (0,0) size 215x19
-          text run at (0,0) width 215: "This is a test for regressions against "
-        LayoutInline {I} at (0,0) size 756x39
-          LayoutInline {A} at (0,0) size 350x19 [color=#0000EE]
-            LayoutText {#text} at (215,0) size 350x19
-              text run at (215,0) width 350: "http://bugzilla.opendarwin.org/show_bug.cgi?id=8056"
-          LayoutText {#text} at (564,0) size 756x39
-            text run at (564,0) width 5: " "
-            text run at (568,0) width 188: "Flexible boxes do not repaint"
-            text run at (0,20) width 244: "their top, left and children's overflows"
-        LayoutText {#text} at (243,20) size 5x19
-          text run at (243,20) width 5: "."
-      LayoutBlockFlow {DIV} at (0,66) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-            LayoutText {#text} at (1,1) size 169x19
-              text run at (1,1) width 169: "Lorem ipsum dolor sit amet."
-      LayoutBlockFlow {DIV} at (0,186) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-      LayoutBlockFlow {DIV} at (0,306) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-      LayoutBlockFlow {DIV} at (0,426) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-            LayoutText {#text} at (1,1) size 94x159
-              text run at (1,1) width 79: "Lorem ipsum"
-              text run at (1,21) width 86: "dolor sit amet,"
-              text run at (1,41) width 76: "consectetuer"
-              text run at (1,61) width 84: "adipiscing elit."
-              text run at (1,81) width 92: "Etiam et ipsum."
-              text run at (1,101) width 30: "Nam"
-              text run at (1,121) width 94: "consectetuer mi"
-              text run at (1,141) width 57: "eget velit."
-layer at (8,64) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,56) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.png
deleted file mode 100644
index 32c3ebd..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.txt
deleted file mode 100644
index cd7a020..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/flexible-box-overflow-horizontal-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x552
-      LayoutBlockFlow {P} at (0,0) size 784x40
-        LayoutText {#text} at (0,0) size 215x19
-          text run at (0,0) width 215: "This is a test for regressions against "
-        LayoutInline {I} at (0,0) size 756x39
-          LayoutInline {A} at (0,0) size 350x19 [color=#0000EE]
-            LayoutText {#text} at (215,0) size 350x19
-              text run at (215,0) width 350: "http://bugzilla.opendarwin.org/show_bug.cgi?id=8056"
-          LayoutText {#text} at (564,0) size 756x39
-            text run at (564,0) width 5: " "
-            text run at (568,0) width 188: "Flexible boxes do not repaint"
-            text run at (0,20) width 244: "their top, left and children's overflows"
-        LayoutText {#text} at (243,20) size 5x19
-          text run at (243,20) width 5: "."
-      LayoutBlockFlow {DIV} at (0,66) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-            LayoutText {#text} at (1,1) size 169x19
-              text run at (1,1) width 169: "Lorem ipsum dolor sit amet."
-      LayoutBlockFlow {DIV} at (0,186) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-      LayoutBlockFlow {DIV} at (0,306) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-      LayoutBlockFlow {DIV} at (0,426) size 784x100
-        LayoutDeprecatedFlexibleBox {DIV} at (10,10) size 80x80 [bgcolor=#FFFF00]
-          LayoutBlockFlow {DIV} at (-10,-10) size 100x100 [border: (1px solid #000000)]
-            LayoutText {#text} at (1,1) size 94x159
-              text run at (1,1) width 79: "Lorem ipsum"
-              text run at (1,21) width 86: "dolor sit amet,"
-              text run at (1,41) width 76: "consectetuer"
-              text run at (1,61) width 84: "adipiscing elit."
-              text run at (1,81) width 92: "Etiam et ipsum."
-              text run at (1,101) width 30: "Nam"
-              text run at (1,121) width 94: "consectetuer mi"
-              text run at (1,141) width 57: "eget velit."
-layer at (8,64) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,56) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/float-move-during-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/float-move-during-layout-expected.txt
deleted file mode 100644
index 554e921..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/float-move-during-layout-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [8, 210, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [8, 110, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/float-overflow-expected.txt
deleted file mode 100644
index cfdcccf..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/float-overflow-expected.txt
+++ /dev/null
@@ -1,1273 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [11, 366, 778, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [11, 360, 778, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 537, 62, 37],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 531, 62, 37],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 498, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 492, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 459, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 453, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 420, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 414, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [61, 249, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [61, 243, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [61, 210, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [61, 204, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 171, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 165, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 132, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 126, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 93, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 87, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 54, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 48, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 15, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [61, 9, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 366, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 360, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 327, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 321, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 288, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [61, 282, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 504, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 498, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 465, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 459, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 426, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 420, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 216, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 210, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 177, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 171, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 138, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 132, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 99, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 93, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 60, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 54, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 21, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 15, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 374, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 368, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 335, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 329, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 296, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [69, 290, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 375, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 369, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 336, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 330, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 297, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [70, 291, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [67, 138, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [67, 132, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [65, 60, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [65, 54, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [65, 21, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [65, 15, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 543, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 537, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 504, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 498, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 465, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 459, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 426, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 420, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 255, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 249, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 216, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 210, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 177, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 171, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 99, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [59, 93, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 543, 32, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 537, 32, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 255, 32, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [67, 249, 32, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [66, 297, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [66, 291, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [63, 21, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [63, 15, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 543, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 537, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 504, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 498, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 465, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 459, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 426, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 420, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 255, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 249, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 216, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 210, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 177, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 171, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 138, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [59, 132, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [58, 375, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [58, 369, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [58, 336, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [58, 330, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [57, 99, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [57, 93, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [57, 60, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [57, 54, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [66, 298, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [66, 292, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [63, 22, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [63, 16, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 544, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 538, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 505, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 499, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 466, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 460, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 427, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 421, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 256, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 250, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 217, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 211, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 178, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 172, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 139, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [59, 133, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [58, 376, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [58, 370, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [58, 337, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [58, 331, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [57, 100, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [57, 94, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [57, 61, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [57, 55, 16, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/float-overflow-right-expected.txt
deleted file mode 100644
index c4e5b5b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/float-overflow-right-expected.txt
+++ /dev/null
@@ -1,1273 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [11, 366, 778, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [11, 360, 778, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 537, 62, 37],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 531, 62, 37],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 498, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 492, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 459, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 453, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 420, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 414, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [677, 249, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [677, 243, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [677, 210, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-          "rect": [677, 204, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 171, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 165, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 132, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 126, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 93, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 87, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 54, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 48, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 15, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='outer'",
-          "rect": [677, 9, 62, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 366, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 360, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 327, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 321, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 288, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE class='outer'",
-          "rect": [681, 282, 58, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 504, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 498, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 465, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 459, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 426, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 420, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 216, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 210, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 177, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 171, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 138, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 132, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 99, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 93, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 60, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 54, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 21, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [683, 15, 50, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 374, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 368, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 335, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 329, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 296, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [689, 290, 42, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 543, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 537, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 504, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 498, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 465, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 459, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 426, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 420, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 255, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 249, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 216, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 210, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 177, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 171, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 99, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [701, 93, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [695, 60, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [695, 54, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [695, 21, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [695, 15, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [693, 138, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [693, 132, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 375, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 369, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 336, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 330, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 297, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [690, 291, 40, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [701, 543, 32, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [701, 537, 32, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [701, 255, 32, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [701, 249, 32, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [727, 99, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [727, 93, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [727, 60, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [727, 54, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [726, 375, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [726, 369, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [726, 336, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [726, 330, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 543, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 537, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 504, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 498, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 465, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 459, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 426, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 420, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 255, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 249, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 216, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 210, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 177, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 171, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 138, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [725, 132, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [721, 21, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [721, 15, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [718, 297, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [718, 291, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [727, 100, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [727, 94, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [727, 61, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [727, 55, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [726, 376, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [726, 370, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [726, 337, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [726, 331, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 544, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 538, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 505, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 499, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 466, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 460, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 427, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 421, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 256, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 250, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 217, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 211, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 178, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 172, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 139, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [725, 133, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [721, 22, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [721, 16, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [718, 298, 16, 18],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [718, 292, 16, 18],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-continuations-expected.txt
deleted file mode 100644
index e3273ab..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-continuations-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "rect": [7, 87, 85, 22],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.png
deleted file mode 100644
index 0c781fc..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.txt
deleted file mode 100644
index e3273ab..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-enable-continuations-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "rect": [7, 87, 85, 22],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.png
deleted file mode 100644
index 29ee2cc..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-layers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-ring-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-ring-expected.png
deleted file mode 100644
index 02e9d72..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-ring-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-child-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-child-move-expected.txt
deleted file mode 100644
index a1fc96f8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-child-move-expected.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [99, 49, 302, 302],
-          "reason": "outline"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='child'",
-          "rect": [300, 50, 20, 300],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='child'",
-          "rect": [150, 50, 20, 300],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "outline"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='child'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-continuation-move-expected.txt
deleted file mode 100644
index 64e9bdf..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-continuation-move-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [207, 231, 102, 102],
-          "reason": "outline"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [7, 231, 102, 102],
-          "reason": "outline"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='block'",
-          "rect": [208, 232, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='block'",
-          "rect": [8, 232, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "outline"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='block'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt
deleted file mode 100644
index 01ee39c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 8, 784, 105],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [7, 7, 102, 182],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [7, 7, 102, 182],
-          "reason": "outline"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='block'",
-          "rect": [8, 88, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='block'",
-          "rect": [8, 8, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "outline"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='block'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt
deleted file mode 100644
index 2e8299c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutButton BUTTON",
-          "rect": [7, 7, 52, 24],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [16, 10, 34, 18],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 11, 34, 16],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutButton BUTTON",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Reset'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index 32d2deb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index a873b21..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.png
deleted file mode 100644
index 42f8191..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt
deleted file mode 100644
index 33de40d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSlider INPUT",
-          "rect": [9, 9, 131, 23],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='track'",
-          "rect": [10, 10, 129, 21],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutFlexibleBox DIV",
-          "rect": [10, 10, 129, 21],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='thumb'",
-          "rect": [69, 10, 11, 21],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSlider INPUT",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutFlexibleBox DIV",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='track'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='thumb'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
deleted file mode 100644
index 3f9b0857..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutButton INPUT",
-          "rect": [7, 7, 59, 24],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [16, 10, 41, 18],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [16, 11, 41, 16],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutButton INPUT",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Submit'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/gradients-em-stops-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/gradients-em-stops-repaint-expected.txt
deleted file mode 100644
index f391b70..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/gradients-em-stops-repaint-expected.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV class='em-units'",
-          "rect": [8, 8, 784, 147],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='box4' class='box'",
-          "rect": [344, 18, 302, 122],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='box3' class='box'",
-          "rect": [18, 18, 302, 122],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='indicator'",
-          "rect": [345, 19, 240, 20],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [330, 135, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV class='em-units'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='box3' class='box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='box4' class='box'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='indicator'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png
deleted file mode 100644
index 545f7127..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.txt
deleted file mode 100644
index c6103ec..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 72, 732, 94],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 74, 728, 90],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 82, 712, 74],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png
deleted file mode 100644
index bcf3a560..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.txt
deleted file mode 100644
index 31f7e7b3..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 72, 732, 94],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 74, 728, 90],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [10, 74, 728, 90],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 82, 712, 74],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "appeared"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/in-scaled-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/in-scaled-iframe-expected.txt
deleted file mode 100644
index 1ca05c1e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/in-scaled-iframe-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 825],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div'",
-          "rect": [209, 209, 100, 100],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='div'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.png
deleted file mode 100644
index 23e55b8dc..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.txt
deleted file mode 100644
index a1ad30c7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-block-overflow-expected.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 302x19
-          text run at (0,0) width 302: "This is a repaint test of inline blocks with overflow."
-      LayoutBlockFlow (anonymous) at (0,46) size 784x20
-        LayoutInline {SPAN} at (0,0) size 195x19
-          LayoutText {#text} at (0,0) size 95x19
-            text run at (0,0) width 95: "Here comes an "
-          LayoutBlockFlow {SPAN} at (95,0) size 100x20 [bgcolor=#C0C0C0]
-            LayoutText {#text} at (0,0) size 97x39
-              text run at (0,0) width 97: "inline block with"
-              text run at (0,20) width 56: "overflow."
-        LayoutText {#text} at (0,0) size 0x0
-layer at (8,44) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,36) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-color-change-expected.txt
deleted file mode 100644
index 8b3642e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-color-change-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "rect": [8, 72, 37, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 72, 37, 19],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.png
deleted file mode 100644
index f0703530..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.txt
deleted file mode 100644
index 9280eb67..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-focus-expected.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [0, 36, 800, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [0, 0, 800, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 36, 395, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline A id='link'",
-          "rect": [585, -1, 216, 234],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 0, 37, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline A id='link'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Home'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'crbug.com/424078: ensure inline elements get their outline painted'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-2-expected.txt
deleted file mode 100644
index ebacbef..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-2-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN",
-          "rect": [210, -5, 50, 20],
-          "reason": "outline"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [215, 0, 40, 10],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutInline SPAN",
-      "reason": "outline"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "outline"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Test'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.png
deleted file mode 100644
index 8bf77b7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.txt
deleted file mode 100644
index f654178..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-outline-repaint-expected.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 156, 100, 40],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='test'",
-          "rect": [5, 153, 92, 45],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 156, 86, 39],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutInline SPAN id='test'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsum'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'dolor\u00A0'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-reflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-reflow-expected.txt
deleted file mode 100644
index 887f07f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/inline-reflow-expected.txt
+++ /dev/null
@@ -1,113 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div1' class='container'",
-          "rect": [0, 0, 300, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 0, 300, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div2' class='container'",
-          "rect": [0, 300, 300, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div1' class='container'",
-          "rect": [0, 0, 200, 300],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 0, 200, 300],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 300, 180, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='div1' class='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'A A A A A AA AA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AA AA AAA AAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAA AAAA AAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAAA AAAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAAAA AAAAAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAAAA AAAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAAA AAAA AAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAA AAA AAA AA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AA AA AA A A A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'A A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='div2' class='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'A A A A A'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt
deleted file mode 100644
index 7342bca..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 4936],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [8, 2408, 100, 100],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
deleted file mode 100644
index 32c822d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "rect": [8, 8, 26, 24],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 26, 19],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Text'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update-expected.png
deleted file mode 100644
index 0fb345c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt
deleted file mode 100644
index 5d7596e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='root' class='editing'",
-          "rect": [7, 7, 786, 20],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 10, 18],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='root' class='editing'",
-      "reason": "full"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
deleted file mode 100644
index 0aae2c6e5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTextControl INPUT id='root'",
-      "position": [7, 7],
-      "bounds": [70, 24],
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 70, 24],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 68, 22],
-          "reason": "full"
-        }
-      ]
-    },
-    {
-      "name": "Child Containment Layer",
-      "position": [3, 3],
-      "bounds": [64, 18]
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='inner-editor'",
-      "position": [0, 1],
-      "bounds": [64, 16],
-      "shouldFlattenTransform": false,
-      "drawsContent": true
-    },
-    {
-      "name": "Scrolling Layer",
-      "bounds": [64, 16],
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [75, 16],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [73, 0, 1, 16],
-          "reason": "caret"
-        }
-      ]
-    },
-    {
-      "name": "Overflow Controls Host Layer",
-      "bounds": [64, 16]
-    },
-    {
-      "name": "Horizontal Scrollbar Layer",
-      "position": [0, 16],
-      "bounds": [64, 0],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='root'",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt
deleted file mode 100644
index 72994ca..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTextControl INPUT id='root'",
-      "position": [7, 7],
-      "bounds": [70, 24],
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 70, 24],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 68, 22],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [3, 4, 64, 16],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 4, 64, 16],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl INPUT id='root'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'test test test'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
deleted file mode 100644
index ce8f3fcd..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
+++ /dev/null
@@ -1,161 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 2350],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
-          "rect": [8, 2000, 777, 350],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
-          "rect": [8, 2000, 777, 350],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 2200, 777, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 2200, 777, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 2050, 777, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 2050, 777, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 2046, 766, 108],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 2046, 766, 108],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 2196, 639, 108],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 2196, 639, 108],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'This test checks that switching opacity'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'invalidates the full subtree.'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'This text should be visible in the'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'output.'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'This test checks that switching opacity'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'invalidates the full subtree.'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'This text should be visible in the'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'output.'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.png
deleted file mode 100644
index b17aa4e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.txt
deleted file mode 100644
index 612ba88..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.txt
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [228, 123, 543, 394],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.png
deleted file mode 100644
index e88abe3..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt
deleted file mode 100644
index a74a4b6..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [376, 23, 395, 544],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
deleted file mode 100644
index 519fcb3..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.txt
deleted file mode 100644
index 776f481..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-child-outline-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 300x19
-          text run at (0,0) width 300: "This tests repainting of a layer's children's outlines."
-layer at (8,44) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,36) size 784x2 [border: (1px inset #EEEEEE)]
-layer at (8,54) size 100x100
-  LayoutBlockFlow (relative positioned) {DIV} at (0,46) size 100x100 [bgcolor=#C0C0C0]
-    LayoutBlockFlow {DIV} at (0,0) size 100x100
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.png
deleted file mode 100644
index 6b363d9..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.txt
deleted file mode 100644
index a3fda7e7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-outline-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 197x19
-          text run at (0,0) width 197: "This tests for regressions against "
-        LayoutInline {I} at (0,0) size 546x19
-          LayoutInline {A} at (0,0) size 350x19 [color=#0000EE]
-            LayoutText {#text} at (197,0) size 350x19
-              text run at (197,0) width 350: "http://bugzilla.opendarwin.org/show_bug.cgi?id=7943"
-          LayoutText {#text} at (546,0) size 197x19
-            text run at (546,0) width 197: " Layer outline does not repaint"
-        LayoutText {#text} at (742,0) size 5x19
-          text run at (742,0) width 5: "."
-layer at (8,44) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,36) size 784x2 [border: (1px inset #EEEEEE)]
-layer at (18,194) size 100x100 clip at (19,195) size 98x98
-  LayoutBlockFlow {DIV} at (10,186) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (8,54) size 784x130
-  LayoutBlockFlow (relative positioned) {DIV} at (0,46) size 784x130
-layer at (18,64) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (10,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (148,64) size 100x100 backgroundClip at (138,54) size 100x100 clip at (138,54) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (140,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (278,64) size 100x100 backgroundClip at (268,54) size 5x5 clip at (268,54) size 5x5
-  LayoutBlockFlow (positioned) {DIV} at (270,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (408,64) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (400,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (538,64) size 100x100 backgroundClip at (548,74) size 100x100 clip at (548,74) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (530,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (668,64) size 100x100 backgroundClip at (773,169) size 5x5 clip at (773,169) size 5x5
-  LayoutBlockFlow (positioned) {DIV} at (660,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (18,324) size 100x100
-  LayoutBlockFlow (relative positioned) {DIV} at (0,296) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.png
deleted file mode 100644
index 6b363d9..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.txt
deleted file mode 100644
index a3fda7e7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layer-outline-horizontal-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 197x19
-          text run at (0,0) width 197: "This tests for regressions against "
-        LayoutInline {I} at (0,0) size 546x19
-          LayoutInline {A} at (0,0) size 350x19 [color=#0000EE]
-            LayoutText {#text} at (197,0) size 350x19
-              text run at (197,0) width 350: "http://bugzilla.opendarwin.org/show_bug.cgi?id=7943"
-          LayoutText {#text} at (546,0) size 197x19
-            text run at (546,0) width 197: " Layer outline does not repaint"
-        LayoutText {#text} at (742,0) size 5x19
-          text run at (742,0) width 5: "."
-layer at (8,44) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,36) size 784x2 [border: (1px inset #EEEEEE)]
-layer at (18,194) size 100x100 clip at (19,195) size 98x98
-  LayoutBlockFlow {DIV} at (10,186) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (8,54) size 784x130
-  LayoutBlockFlow (relative positioned) {DIV} at (0,46) size 784x130
-layer at (18,64) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (10,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (148,64) size 100x100 backgroundClip at (138,54) size 100x100 clip at (138,54) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (140,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (278,64) size 100x100 backgroundClip at (268,54) size 5x5 clip at (268,54) size 5x5
-  LayoutBlockFlow (positioned) {DIV} at (270,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (408,64) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (400,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (538,64) size 100x100 backgroundClip at (548,74) size 100x100 clip at (548,74) size 100x100
-  LayoutBlockFlow (positioned) {DIV} at (530,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (668,64) size 100x100 backgroundClip at (773,169) size 5x5 clip at (773,169) size 5x5
-  LayoutBlockFlow (positioned) {DIV} at (660,10) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
-layer at (18,324) size 100x100
-  LayoutBlockFlow (relative positioned) {DIV} at (0,296) size 100x100 [bgcolor=#EEEEEE] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layout-state-relative-expected.txt
deleted file mode 100644
index 15609ae6..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layout-state-relative-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
-          "rect": [8, 152, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 152, 37, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset-expected.txt
deleted file mode 100644
index f52e721..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [100, 120, 50, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [100, 120, 39, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'after'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2-expected.txt
deleted file mode 100644
index 9dabf5a1..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset2-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [102, 122, 50, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [102, 122, 39, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'after'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset3-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset3-expected.txt
deleted file mode 100644
index 15c924c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layout-state-scrolloffset3-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [100, 120, 34, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [100, 120, 34, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'after'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
deleted file mode 100644
index e912a1c2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 40, 784, 105],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='target'",
-          "rect": [8, 220, 100, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='target'",
-          "rect": [8, 200, 100, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN",
-          "rect": [8, 120, 100, 104],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 220, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 220, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 200, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 200, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'x'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1-expected.txt
deleted file mode 100644
index 4fc3cd5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-1-expected.txt
+++ /dev/null
@@ -1,319 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 240, 406, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 80, 406, 119],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 500, 406, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 180, 406, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 420, 355, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 380, 355, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 287, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [134, 360, 131, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 360, 131, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='pinkFloat'",
-          "rect": [378, 138, 70, 30],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [303, 420, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [244, 420, 64, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 363, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 343, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [151, 180, 39, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [84, 180, 39, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='pinkFloat'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing her'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked away,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'comfortably enough, under her arm, with its legs hanging'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'down,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'but generally, just as she had got its neck nicely'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'straightened\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'out, and was going to give the hedgehog a blow with'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'its head, it\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' twist itself round and look up in her face, with'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'such a puzzled expression that she could not help bursting out'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'laughing: and when she had got its head down, and was going to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog had'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away: besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'there was generally a ridge or furrow in the way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wanted to send the hedgehog to, and, as the doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'were always getting up and walking off to other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice soon came to the conclusion that it was a very'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and shouting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about once in a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet had'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me?'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10-expected.txt
deleted file mode 100644
index 9b1d774..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-10-expected.txt
+++ /dev/null
@@ -1,224 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 240, 406, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 500, 406, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 440, 355, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 304, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 287, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [134, 360, 131, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [303, 420, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 363, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 374, 48, 64],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'head!\u2019 about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet had'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me?'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2-expected.txt
deleted file mode 100644
index 599120b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-2-expected.txt
+++ /dev/null
@@ -1,391 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 74, 418, 526],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 241, 406, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 240, 406, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 501, 406, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 500, 406, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 181, 406, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 180, 406, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 441, 355, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 440, 355, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 80, 354, 120],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 381, 304, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 304, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 381, 287, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 287, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [134, 361, 131, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [134, 360, 131, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [303, 421, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [303, 420, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [372, 384, 48, 81],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [372, 383, 48, 81],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 364, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 363, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [149, 180, 44, 20],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [485, 0, 15, 600],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing her'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked away,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'comfortably enough, under her arm, with its legs hanging'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'down,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'but generally, just as she had got its neck nicely'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'straightened\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'out, and was going to give the hedgehog a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'blow with its head, it\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline I id='would'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'would'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' twist itself round and look up in her'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'face, with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'such a puzzled expression that she could not help'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'bursting out\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'laughing: and when she had got its head down, and was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'going to\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet had'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me?'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3-expected.txt
deleted file mode 100644
index 1ab8062d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-3-expected.txt
+++ /dev/null
@@ -1,224 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 240, 406, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 500, 406, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 440, 355, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 420, 339, 39],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 304, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 288, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [134, 360, 131, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [303, 420, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [356, 383, 64, 81],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'head!\u2019 about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet had'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me?'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4-expected.txt
deleted file mode 100644
index bb410edd..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-4-expected.txt
+++ /dev/null
@@ -1,219 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 240, 406, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 500, 406, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 440, 406, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 304, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 287, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [134, 360, 131, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [303, 420, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-          "rect": [372, 447, 48, 17],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about once in'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet had'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me?'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5-expected.txt
deleted file mode 100644
index 95b5211..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-5-expected.txt
+++ /dev/null
@@ -1,233 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 240, 406, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 500, 406, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 420, 355, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [49, 380, 320, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [49, 380, 303, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [134, 360, 131, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [118, 360, 131, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [303, 420, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [275, 420, 64, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [46, 363, 16, 65],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet had'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me?'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6-expected.txt
deleted file mode 100644
index 909bb10..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-6-expected.txt
+++ /dev/null
@@ -1,153 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 240, 406, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 304, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 287, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [134, 360, 131, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 363, 48, 65],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [28, 363, 20, 20],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'foo'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7-expected.txt
deleted file mode 100644
index 4cab783..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-7-expected.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 304, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [297, 420, 72, 19],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='theQueen'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8-expected.txt
deleted file mode 100644
index 7350247b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-8-expected.txt
+++ /dev/null
@@ -1,354 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 74, 418, 526],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 240, 406, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 500, 406, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 480, 406, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 180, 406, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 440, 355, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 420, 355, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 80, 354, 119],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 380, 354, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 304, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 380, 298, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 287, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [134, 360, 131, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [83, 360, 131, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [303, 420, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [143, 420, 64, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-          "rect": [14, 363, 48, 65],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [151, 180, 39, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [485, 0, 15, 600],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing her'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked away,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'comfortably enough, under her arm, with its legs hanging'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'down,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'but generally, just as she had got its neck nicely'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'straightened\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'out, and was going to give the hedgehog a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'blow with its head, it\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'would'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' twist itself round and look up in her'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'face, with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'such a puzzled expression that she could not help'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'bursting out\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'laughing: and when she had got its head down, and was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'going to\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for turns,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for the hedgehogs; and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' was in a furious passion,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and shouting \u2018Off with his head!\u2019'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet had'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me?'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9-expected.txt
deleted file mode 100644
index 892c3ab..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-flow-with-floats-9-expected.txt
+++ /dev/null
@@ -1,252 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 240, 406, 139],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 500, 406, 99],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 180, 406, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 440, 355, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 304, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [65, 380, 287, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [134, 360, 131, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [303, 420, 66, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN id='yellowFloat'",
-          "rect": [372, 243, 48, 49],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' twist itself round and look up in her'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'face, with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'such a puzzled expression that she could not help'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'bursting out\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'laughing: and when she had got its head down, and was'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'going to\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) SPAN id='yellowFloat'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehog had\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'unrolled itself, and was in the act of crawling'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'away: besides all\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'this, there was generally a ridge or furrow'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'in the way wherever\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the doubled-up\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'other parts of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was a very\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'difficult game indeed.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'The players all played at once without waiting\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'for'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'turns,\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hedgehogs; and in\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a very short time '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'the Queen'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'was in a furious passion, and went\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'stamping about, and'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'her head!\u2019 about'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'once in a minute.\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'yet had'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'happen any'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'me?'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-in-scrolled-clipped-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-in-scrolled-clipped-block-expected.txt
deleted file mode 100644
index 05a0a97c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-in-scrolled-clipped-block-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [8, 8, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 100, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox '                         PASS     .'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-overflow-expected.txt
deleted file mode 100644
index 98007ed..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/line-overflow-expected.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 122, 196, 79],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 82, 190, 59],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='t'",
-          "rect": [47, 92, 33, 49],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline SPAN id='t'",
-          "rect": [77, 122, 33, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [77, 122, 33, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [47, 122, 33, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Cras faucibus. Nunc adipiscing,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'enim in scelerisque convallis,'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'augue '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='t'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'purus'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' eleifend lacus, at'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'sagittis eros leo pulvinar velit.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Integer sollicitudin nisi ut urna'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'blandit convallis.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/lines-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/lines-with-layout-delta-expected.txt
deleted file mode 100644
index 10296fae..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/lines-with-layout-delta-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='target'",
-          "rect": [8, 58, 200, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 58, 37, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/list-marker-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/list-marker-2-expected.txt
deleted file mode 100644
index 31746317..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/list-marker-2-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutListItem LI",
-          "rect": [48, 100, 744, 105],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG id='target'",
-          "rect": [48, 100, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutListMarker (anonymous)",
-          "rect": [30, 185, 7, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutListMarker (anonymous)",
-          "rect": [30, 135, 7, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutListItem LI",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutListMarker (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG id='target'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.png
deleted file mode 100644
index 62c9b65..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.txt
deleted file mode 100644
index f608903..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/list-marker-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x576
-      LayoutBlockFlow {P} at (0,0) size 784x40
-        LayoutText {#text} at (0,0) size 50x19
-          text run at (0,0) width 50: "Test for "
-        LayoutInline {I} at (0,0) size 730x39
-          LayoutInline {A} at (0,0) size 306x19 [color=#0000EE]
-            LayoutText {#text} at (49,0) size 306x19
-              text run at (49,0) width 306: "http://bugs.webkit.org/show_bug.cgi?id=12910"
-          LayoutText {#text} at (354,0) size 730x39
-            text run at (354,0) width 5: " "
-            text run at (358,0) width 372: "REGRESSION (r18756-r18765): list-bullet doesn't redraw"
-            text run at (0,20) width 374: "properly when changing the list's content using JavaScript"
-        LayoutText {#text} at (373,20) size 5x19
-          text run at (373,20) width 5: "."
-      LayoutBlockFlow {UL} at (0,56) size 784x20
-        LayoutListItem {LI} at (40,0) size 744x20
-          LayoutBlockFlow (anonymous) at (0,0) size 744x20
-            LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
-            LayoutText {#text} at (0,0) size 20x19
-              text run at (0,0) width 20: "foo"
-          LayoutBlockFlow {DIV} at (10,30) size 724x0
-      LayoutBlockFlow {UL} at (0,92) size 784x20
-        LayoutListItem {LI} at (40,0) size 744x20
-          LayoutBlockFlow (anonymous) at (0,0) size 744x20
-            LayoutListMarker (anonymous) at (-1,0) size 7x19: bullet
-            LayoutText {#text} at (22,0) size 20x19
-              text run at (22,0) width 20: "bar"
-          LayoutBlockFlow {DIV} at (10,30) size 724x0
-      LayoutBlockFlow {UL} at (0,128) size 784x20
-        LayoutListItem {LI} at (0,0) size 744x20
-          LayoutBlockFlow (anonymous) at (0,0) size 744x20
-            LayoutListMarker (anonymous) at (755,0) size 7x19: bullet
-            LayoutText {#text} at (724,0) size 20x19
-              text run at (724,0) width 20: "foo"
-          LayoutBlockFlow {DIV} at (10,30) size 724x0
-      LayoutBlockFlow {UL} at (0,164) size 784x20
-        LayoutListItem {LI} at (0,0) size 744x20
-          LayoutBlockFlow (anonymous) at (0,0) size 744x20
-            LayoutListMarker (anonymous) at (738,0) size 7x19: bullet
-            LayoutText {#text} at (702,0) size 20x19
-              text run at (702,0) width 20: "bar"
-          LayoutBlockFlow {DIV} at (10,30) size 724x0
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/make-children-non-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/make-children-non-inline-expected.txt
deleted file mode 100644
index 1094d9b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/make-children-non-inline-expected.txt
+++ /dev/null
@@ -1,353 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 64, 784, 280],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 64, 784, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 264, 784, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 264, 104, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 164, 104, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 144, 77, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 144, 77, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 104, 77, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 104, 77, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 284, 65, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 184, 65, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 324, 61, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 224, 61, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 124, 42, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 124, 42, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 84, 42, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 84, 42, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 64, 39, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 64, 39, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 304, 27, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 204, 27, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [8, 164, 10, 100],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Word,'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'words,'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'more words.'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'I could'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'write a book'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'about all the stuff'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'that comes'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'after'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'the break.'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame-expected.txt
deleted file mode 100644
index 823fd0e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/multi-layout-one-frame-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [187, 11, 169, 16],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [10, 11, 169, 16],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [187, 11, 53, 16],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 11, 53, 16],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASSED'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASSED'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/multicol-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/multicol-repaint-expected.txt
deleted file mode 100644
index 05a01378..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/multicol-repaint-expected.txt
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutMultiColumnFlowThread (anonymous)",
-          "rect": [9, 9, 400, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='a'",
-          "rect": [234, 10, 300, 57],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [234, 15, 300, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [234, 15, 50, 50],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [9, 10, 13, 58],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutMultiColumnFlowThread (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'XXXXXX'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/multicol-with-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/multicol-with-text-expected.txt
deleted file mode 100644
index 1c001d7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/multicol-with-text-expected.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutMultiColumnFlowThread (anonymous)",
-          "rect": [8, 8, 630, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [488, 8, 80, 20],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutMultiColumnFlowThread (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/non-text-link-invalidation-optimization-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/non-text-link-invalidation-optimization-expected.png
deleted file mode 100644
index 8f5f1c1e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/non-text-link-invalidation-optimization-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt
deleted file mode 100644
index 19157495..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) UL id='submenu'",
-          "rect": [48, 94, 40, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) UL id='submenu'",
-          "rect": [48, -156, 40, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutListMarker (anonymous)",
-          "rect": [70, 94, 7, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutListMarker (anonymous)",
-          "rect": [70, -156, 7, 19],
-          "reason": "geometry"
-        }
-      ]
-    },
-    {
-      "name": "LayoutListItem (floating) LI id='watches'",
-      "position": [30, 44],
-      "transformOrigin": [18, 10],
-      "bounds": [25, 19],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutInline (relative positioned) SPAN id='placeholder'",
-      "position": [18, 0],
-      "backfaceVisibility": "hidden"
-    },
-    {
-      "name": "LayoutListItem (relative positioned) (floating) LI id='menu'",
-      "position": [30, 44],
-      "bounds": [18, 19],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutListMarker (anonymous)",
-          "rect": [0, 0, 7, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutListMarker (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) UL id='submenu'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutListItem LI",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutListMarker (anonymous)",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/opacity-change-on-overflow-float-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/opacity-change-on-overflow-float-expected.txt
deleted file mode 100644
index 5a0911b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/opacity-change-on-overflow-float-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (floating) DIV class='green'",
-          "rect": [8, 84, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV class='green'",
-          "rect": [8, 84, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV class='red'",
-          "rect": [8, 84, 100, 100],
-          "reason": "background"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV class='green'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV class='red'",
-      "reason": "background"
-    },
-    {
-      "object": "LayoutBlockFlow (floating) DIV class='green'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-become-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-become-affected-by-descendant-expected.txt
deleted file mode 100644
index de9fdc2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-become-affected-by-descendant-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='outline'",
-          "rect": [7, 7, 152, 102],
-          "reason": "outline"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='child'",
-          "rect": [58, 8, 100, 50],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='outline'",
-      "reason": "outline"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='child'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt
deleted file mode 100644
index a318da6..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='outline'",
-          "rect": [7, 7, 152, 102],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='child'",
-          "rect": [58, 8, 100, 50],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='outline'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='child'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-clip-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-clip-change-expected.txt
deleted file mode 100644
index 59d348b4..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-clip-change-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) A id='link' class='updated'",
-          "rect": [43, 103, 91, 30],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [48, 108, 81, 19],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) A id='link' class='updated'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Lorem Ipsum'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-continuations-expected.txt
deleted file mode 100644
index 8e51ae7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-continuations-expected.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [18, 150, 200, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [18, 110, 200, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "rect": [16, 108, 87, 63],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "rect": [16, 148, 87, 23],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 150, 83, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 110, 83, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'CONTENTS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'CONTENTS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='outer'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-inset-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-inset-expected.txt
deleted file mode 100644
index e26873f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-inset-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 191, 200, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [19, 29, 200, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='b'",
-          "rect": [29, 231, 180, 20],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='a'",
-          "rect": [29, 69, 180, 20],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='a'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='b'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-repaint-glitch-expected.txt
deleted file mode 100644
index 003f9e5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-repaint-glitch-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [15, 391, 208, 68],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [15, 229, 208, 68],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='b'",
-          "rect": [29, 435, 180, 20],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='a'",
-          "rect": [29, 273, 180, 20],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='a'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='b'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-shrinking-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-shrinking-expected.txt
deleted file mode 100644
index 612b62a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/outline-shrinking-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='t'",
-          "rect": [4, 114, 108, 108],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='t'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-delete-line-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-delete-line-expected.txt
deleted file mode 100644
index acae3da..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-delete-line-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='dv'",
-          "rect": [8, 74, 80, 36],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 74, 80, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='dv'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'Lorem ipsu'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.png
deleted file mode 100644
index e69493ae..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.txt
deleted file mode 100644
index 7797986b4..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-body-appear-expected.txt
+++ /dev/null
@@ -1,134 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [2008, 2096],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 2008, 2096],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 585, 785, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 16, 784, 2072],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 52, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 16, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [118, 52, 370, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 16, 324, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 52, 110, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [785, 0, 15, 585],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [785, 585, 15, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [488, 52, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'You should see both vertical and horizontal scrollbars.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'This is the test for '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Bug 36461 - No vertical scrollbar after the CSS class change'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.png
deleted file mode 100644
index decf9de..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.txt
deleted file mode 100644
index 3768835..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-delete-expected.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 136, 43, 17],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'Passed'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'Test'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.png
deleted file mode 100644
index 541971ec..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.txt
deleted file mode 100644
index 1df54e65..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='scroller'",
-      "position": [8, 8],
-      "bounds": [200, 200],
-      "shouldFlattenTransform": false,
-      "drawsContent": true,
-      "backgroundColor": "#0000FF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='scroller'",
-          "rect": [0, 0, 200, 200],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "Scrolling Layer",
-      "bounds": [185, 185],
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "Scrolling Contents Layer",
-      "bounds": [185, 552],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='scroller'",
-          "rect": [0, 0, 185, 552],
-          "reason": "background on scrolling contents layer"
-        }
-      ]
-    },
-    {
-      "name": "Overflow Controls Host Layer",
-      "bounds": [200, 200]
-    },
-    {
-      "name": "Horizontal Scrollbar Layer",
-      "position": [0, 185],
-      "bounds": [185, 15],
-      "paintInvalidations": [
-        {
-          "object": "Horizontal Scrollbar Layer",
-          "rect": [0, 0, 185, 15],
-          "reason": "full"
-        }
-      ]
-    },
-    {
-      "name": "Vertical Scrollbar Layer",
-      "position": [185, 0],
-      "bounds": [15, 185],
-      "paintInvalidations": [
-        {
-          "object": "Vertical Scrollbar Layer",
-          "rect": [0, 0, 15, 185],
-          "reason": "full"
-        },
-        {
-          "object": "Vertical Scrollbar Layer",
-          "rect": [0, 0, 15, 185],
-          "reason": "full"
-        }
-      ]
-    },
-    {
-      "name": "Scroll Corner Layer",
-      "position": [185, 185],
-      "bounds": [15, 15],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "Scrolling Contents Layer",
-      "reason": "background on scrolling contents layer"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='scroller'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overhanging-float-detach-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overhanging-float-detach-repaint-expected.txt
deleted file mode 100644
index 1e650a2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/overhanging-float-detach-repaint-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (floating) DIV class='float'",
-          "rect": [8, 68, 100, 100],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV class='float'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='floatContainer'",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl-expected.png
deleted file mode 100644
index fb9d8a2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/paged-with-overflowing-block-rl-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
deleted file mode 100644
index 1214d37..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-target'",
-          "rect": [8, 187, 784, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-target'",
-          "rect": [18, 18, 284, 20],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 18, 22, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 187, 22, 19],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-target'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'abc'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-target'",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/positioned-document-element-expected.txt
deleted file mode 100644
index c357a772..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/positioned-document-element-expected.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#008000",
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 800, 600],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) HTML class='changed'",
-          "rect": [0, 0, 800, 52],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 16, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) HTML class='changed'",
-          "rect": [100, 100, 418, 52],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [108, 116, 402, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [108, 116, 402, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 16, 402, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) HTML class='changed'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/positioned-great-grandparent-change-location-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/positioned-great-grandparent-change-location-expected.txt
deleted file mode 100644
index 394cb4d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/positioned-great-grandparent-change-location-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [100, 200, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [100, 100, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [100, 200, 38, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [100, 100, 38, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Target'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/positioned-list-offset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/positioned-list-offset-change-repaint-expected.txt
deleted file mode 100644
index 94fa46b1..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/positioned-list-offset-change-repaint-expected.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutListItem (positioned) LI",
-          "rect": [8, 64, 214, 237],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [8, 64, 214, 232],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutListItem (positioned) LI",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutListMarker (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/push-block-with-first-line-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/push-block-with-first-line-expected.txt
deleted file mode 100644
index 195826e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/push-block-with-first-line-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='spacer'",
-          "rect": [8, 8, 784, 60],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='test'",
-          "rect": [8, 68, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='test'",
-          "rect": [8, 8, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 68, 140, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 140, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='spacer'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='test'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'JOCULAR'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/quotes-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/quotes-expected.txt
deleted file mode 100644
index 4667862..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/quotes-expected.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 28, 784, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [17, 28, 46, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [15, 28, 46, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [63, 28, 9, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [8, 28, 9, 19],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "rect": [61, 28, 8, 19],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline Q id='q2' class='q-changed'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutInline \u003Cpseudo:before\u003E",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutQuote (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '{'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'quote 2'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutInline \u003Cpseudo:after\u003E",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutQuote (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTextFragment (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox '}'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt
deleted file mode 100644
index f08a997..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [8, 94, 100, 50],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt
deleted file mode 100644
index 9e357bc..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 784, 20],
-          "reason": "geometry"
-        }
-      ]
-    },
-    {
-      "name": "LayoutInline (relative positioned) DIV id='block'",
-      "position": [68, 7],
-      "bounds": [348, 21],
-      "drawsContent": true,
-      "backfaceVisibility": "hidden",
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline (relative positioned) DIV id='block'",
-          "rect": [0, 0, 348, 21],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [1, 1, 346, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline (relative positioned) DIV id='block'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'When this layer moves it shouldn't generate a repaint rect.'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/remove-block-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/remove-block-after-layout-expected.txt
deleted file mode 100644
index 6d0c88d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/remove-block-after-layout-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target'",
-          "rect": [8, 108, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 108, 90, 39],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='target'",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/remove-inline-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/remove-inline-after-layout-expected.txt
deleted file mode 100644
index 5a51ab8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/remove-inline-after-layout-expected.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 108, 784, 105],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [112, 193, 171, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [282, 108, 101, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [112, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [108, 193, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/remove-inline-layer-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/remove-inline-layer-after-layout-expected.txt
deleted file mode 100644
index 117c946..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/remove-inline-layer-after-layout-expected.txt
+++ /dev/null
@@ -1,82 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 108, 784, 105],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "rect": [112, 108, 171, 104],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [112, 193, 171, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [282, 108, 101, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [112, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [108, 193, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
deleted file mode 100644
index 39edb73..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.txt
deleted file mode 100644
index d18be3a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/renderer-destruction-by-invalidateSelection-crash-expected.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x584
-      LayoutBlockFlow {DIV} at (0,0) size 784x22
-        LayoutTextControl {INPUT} at (0,0) size 173x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow (anonymous) at (0,22) size 784x20
-        LayoutText {#text} at (0,0) size 4x19
-          text run at (0,0) width 4: " "
-      LayoutBlockFlow {DIV} at (0,42) size 784x0
-layer at (10,11) size 169x16
-  LayoutBlockFlow {DIV} at (2,3) size 169x16
-caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png
deleted file mode 100644
index 56b1fee..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt
deleted file mode 100644
index fb6ab09..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV",
-          "rect": [428, 38, 300, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='container'",
-          "rect": [408, 18, 300, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV",
-          "rect": [28, 38, 300, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='container'",
-          "rect": [8, 18, 300, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [428, 38, 256, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [28, 38, 256, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'There should only be one copy of this text.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt
deleted file mode 100644
index b2baae1eb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt
+++ /dev/null
@@ -1,107 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#C0C0C0",
-      "paintInvalidations": [
-        {
-          "object": "LayoutIFrame (positioned) IFRAME",
-          "rect": [2, 65, 236, 235],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [2, 300, 236, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [3, 65, 235, 235],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [3, 65, 235, 235],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [3, 300, 235, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [3, 65, 225, 235],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 65, 52, 17],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [237, 65, 16, 235],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [237, 300, 16, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [238, 65, 15, 235],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [238, 300, 15, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame (positioned) IFRAME",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'scroll me'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-resized-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-resized-overflow-expected.txt
deleted file mode 100644
index 49951bb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-resized-overflow-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 192, 784, 52],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='s'",
-          "rect": [8, 188, 108, 56],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='s'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-svg-after-style-change-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-svg-after-style-change-expected.png
deleted file mode 100644
index dda9832..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-svg-after-style-change-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-svg-after-style-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-svg-after-style-change-expected.txt
deleted file mode 100644
index a530f35..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/repaint-svg-after-style-change-expected.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x222
-  LayoutBlockFlow {HTML} at (0,0) size 800x222
-    LayoutBlockFlow {BODY} at (8,8) size 784x206
-      LayoutSVGRoot {svg} at (0,0) size 201x201
-        LayoutSVGContainer {g} at (0,0) size 200x200
-          LayoutSVGPath {path} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [data="M 0 0 L 0 200 L 200 200 L 200 0 Z"]
-          LayoutSVGPath {path} at (0,0) size 200x200 [fill={[type=SOLID] [color=#008000]}] [data="M 0 0 L 0 200 L 200 200 L 200 0 Z"]
-      LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
deleted file mode 100644
index 42f9e6b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV class='imgContainer'",
-          "rect": [8, 8, 194, 237],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [8, 8, 194, 232],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (relative positioned) (floating) DIV class='imgContainer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.png
deleted file mode 100644
index f85b5d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.txt
deleted file mode 100644
index 9070eb9..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/resize-iframe-text-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [500, 400],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutIFrame (positioned) IFRAME",
-          "rect": [0, 200, 500, 200],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 200, 500, 200],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow H3",
-          "rect": [8, 300, 400, 23],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [485, 0, 15, 200],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutIFrame (positioned) IFRAME",
-      "reason": "incremental"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow H3",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe-expected.png
deleted file mode 100644
index f85c570..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe-expected.txt
deleted file mode 100644
index ca3c261..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/resize-scrollable-iframe-expected.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 108, 784, 305],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 108, 300, 300],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [8, 193, 285, 200],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [8, 393, 285, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [93, 108, 200, 285],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [8, 193, 85, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [293, 108, 15, 285],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [93, 108, 15, 85],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [293, 393, 15, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [93, 193, 15, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/ruby-flipped-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/ruby-flipped-blocks-expected.txt
deleted file mode 100644
index e84520b2a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/ruby-flipped-blocks-expected.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 8, 30, 40],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutRubyBase (anonymous)",
-          "rect": [8, 28, 20, 20],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutRubyRun (anonymous)",
-          "rect": [8, 28, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 28, 20, 20],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [28, 33, 10, 10],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'a'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutRubyRun (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'c'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutRubyBase (anonymous)",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'b'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.png
deleted file mode 100644
index 62e5363..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt
deleted file mode 100644
index 97d288d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 1895],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='scrollpanel'",
-          "rect": [677, 252, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-          "rect": [677, 252, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-          "rect": [677, 252, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [677, 252, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-          "rect": [677, 52, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-          "rect": [677, 52, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [677, 52, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='scrollpanel'",
-          "rect": [677, 52, 100, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='scrollpanel'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='scrollpanel'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='scrollpanel'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.png
deleted file mode 100644
index 2bd2b1d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
deleted file mode 100644
index 50e595a43..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 5056],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) HEADER",
-      "position": [8, 28],
-      "bounds": [769, 1972],
-      "drawsContent": true,
-      "backfaceVisibility": "hidden",
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='searchbar'",
-          "rect": [10, 1822, 150, 150],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='recentlink'",
-          "rect": [10, 1822, 150, 150],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='searchbar'",
-          "rect": [10, 1422, 150, 150],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='recentlink'",
-          "rect": [10, 1422, 150, 150],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='searchbar'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='recentlink'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
deleted file mode 100644
index 7977cd1..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/search-field-cancel-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 47, 156, 16],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 47, 58, 16],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'some text'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.png
deleted file mode 100644
index d0b48ced..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.txt
deleted file mode 100644
index 8870e32f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selected-replaced-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 52, 784, 237],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage (relative positioned) IMG id='test' class='moved'",
-          "rect": [8, 132, 214, 232],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage (relative positioned) IMG id='test' class='moved'",
-          "rect": [8, 52, 214, 232],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage (relative positioned) IMG id='test' class='moved'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection-after-delete-expected.txt
deleted file mode 100644
index 46d3e1d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection-after-delete-expected.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='test'",
-          "rect": [38, 78, 152, 102],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [39, 79, 146, 99],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='test'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection-after-remove-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection-after-remove-expected.txt
deleted file mode 100644
index 1afee59..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection-after-remove-expected.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='test'",
-          "rect": [38, 78, 152, 102],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [39, 79, 146, 99],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [67, 158, 39, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [71, 79, 35, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [39, 79, 32, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline SPAN id='removeme'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='test'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'hello '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'world'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection-clear-expected.txt
deleted file mode 100644
index ae8bf2b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection-clear-expected.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='firstLine'",
-          "rect": [8, 8, 100, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 208, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='root'",
-          "rect": [8, 208, 100, 100],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 48, 92, 119],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 48, 8, 19],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='root'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='root'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='firstLine'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "selection"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBR BR",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt
deleted file mode 100644
index 8682db9..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 35, 74, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [11, 11, 55, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutTableCell TD id='firstCell'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'First cell'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD id='secondCell'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Second cell'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt
deleted file mode 100644
index 6057095..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 7, 48, 34],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'xx'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'y'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
deleted file mode 100644
index ce1eaab..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [-8, 7, 48, 34],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'xx'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'y'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
deleted file mode 100644
index fe20478..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [7, 8, 34, 48],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'xx'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'y'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt
deleted file mode 100644
index a81a817..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl INPUT id='target'",
-          "rect": [7, 7, 70, 24],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [10, 11, 64, 16],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 11, 64, 16],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutTextControl INPUT id='target'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'test test test'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png
deleted file mode 100644
index b7aab3d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt
deleted file mode 100644
index 5e26327..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 836],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 742, 785, 94],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-          "rect": [8, 186, 769, 642],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-          "rect": [8, 92, 769, 642],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 92, 732, 94],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 94, 728, 90],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [10, 94, 728, 90],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 102, 712, 74],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [58, 236, 489, 537],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [58, 142, 489, 537],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt
deleted file mode 100644
index da89271..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt
+++ /dev/null
@@ -1,104 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 742],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 742, 785, 99],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-          "rect": [8, 191, 769, 642],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-          "rect": [8, 92, 769, 642],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 92, 769, 99],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 92, 732, 94],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 94, 728, 90],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 102, 712, 74],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [58, 241, 489, 537],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [58, 142, 489, 537],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.png
deleted file mode 100644
index 2bb6c8d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
deleted file mode 100644
index 51f8ce3..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [1059, 585],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 72, 835, 190],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Col 1'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/slider-thumb-float-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/slider-thumb-float-expected.png
deleted file mode 100644
index 7057a68..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/slider-thumb-float-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics-expected.txt
deleted file mode 100644
index 0522b23..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/stacked-diacritics-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='stacked'",
-          "rect": [19, 147, 200, 43],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 148, 126, 41],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='stacked'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/static-to-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/static-to-positioned-expected.txt
deleted file mode 100644
index 32f0eab..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/static-to-positioned-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='t'",
-          "rect": [8, 332, 100, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='t'",
-          "rect": [8, 282, 100, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='a'",
-          "rect": [8, 132, 100, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='a'",
-          "rect": [8, 82, 100, 100],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='a'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='t'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/subtree-layoutstate-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/subtree-layoutstate-transform-expected.txt
deleted file mode 100644
index 60291bfc..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/subtree-layoutstate-transform-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV class='layoutroot'",
-          "rect": [28, 48, 200, 200],
-          "reason": "background"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [28, 48, 200, 200],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV class='layoutroot'",
-      "reason": "background"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
deleted file mode 100644
index ab140a3c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/subtree-root-skipped-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [10, 11, 169, 16],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [10, 11, 35, 16],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='div'",
-          "rect": [8, 288, 10, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='div'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.png
deleted file mode 100644
index a5883e8d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt
deleted file mode 100644
index 4965d46..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt
+++ /dev/null
@@ -1,116 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 52, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [42, 119, 334, 268],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [42, 119, 334, 268],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [42, 119, 334, 268],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [242, 253, 167, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [242, 53, 167, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [9, 253, 167, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [9, 53, 167, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [17, 219, 84, 68],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [17, 219, 84, 68],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [17, 219, 84, 68],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [67, 253, 42, 67],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [67, 186, 42, 67],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/add-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/add-outline-property-on-root-expected.txt
deleted file mode 100644
index d76bf880..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/add-outline-property-on-root-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 784, 105],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [-2, -2, 120, 120],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.png
deleted file mode 100644
index a281ad5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt
deleted file mode 100644
index bf8341d7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#FFFFFF",
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [203, 336, 123, 44],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [203, 336, 123, 44],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [246, 106, 121, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [246, 106, 121, 28],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [354, 127, 105, 102],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [111, 84, 101, 102],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGImage image id='image'",
-          "rect": [352, 397, 98, 99],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGImage image id='image'",
-          "rect": [90, 208, 98, 98],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text id='text'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'This is some text'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGImage image id='image'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-expected.png
deleted file mode 100644
index 296d1f1..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size-expected.png
deleted file mode 100644
index c4d4892..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-same-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-same-image-expected.png
deleted file mode 100644
index 296d1f1..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/animated-svg-as-image-same-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/append-text-node-to-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/append-text-node-to-tspan-expected.txt
deleted file mode 100644
index 19bafb5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/append-text-node-to-tspan-expected.txt
+++ /dev/null
@@ -1,145 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='modify'",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [10, 63, 307, 377],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='modify'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'SS'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/circle-move-invalidation-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/circle-move-invalidation-expected.png
deleted file mode 100644
index 198b4cf..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/circle-move-invalidation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/ems-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/ems-display-none-expected.txt
deleted file mode 100644
index daddbc7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/ems-display-none-expected.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 54, 561, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 54, 561, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 54, 561, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 54, 561, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [50, 54, 561, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='tspan'",
-          "rect": [50, 54, 561, 86],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [50, 54, 561, 86],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='tspan'",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Two lines of text should be visible.'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Two lines of text should be visible.'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/exs-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/exs-display-none-expected.txt
deleted file mode 100644
index 69c22c4..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/exs-display-none-expected.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 52, 561, 84],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 52, 561, 84],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 52, 561, 84],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 52, 561, 84],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [50, 52, 561, 84],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='tspan'",
-          "rect": [50, 52, 561, 84],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [50, 52, 561, 84],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='tspan'",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Two lines of text should be visible.'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Two lines of text should be visible.'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/focus-element-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/focus-element-expected.png
deleted file mode 100644
index 8d2fee6..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/focus-element-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/foreignObject-crash-on-hover-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/foreignObject-crash-on-hover-expected.png
deleted file mode 100644
index b6922e01b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/foreignObject-crash-on-hover-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/hit-test-unclosed-subpaths-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/hit-test-unclosed-subpaths-expected.png
deleted file mode 100644
index 3aa2de6..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/hit-test-unclosed-subpaths-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.png
deleted file mode 100644
index 7335e6c0..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt
deleted file mode 100644
index d916d43..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt
+++ /dev/null
@@ -1,111 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='inner'",
-          "rect": [0, 0, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [100, 85, 100, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [100, 85, 100, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 85, 100, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 85, 100, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [180, 120, 20, 20],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGPath polygon id='triangle'",
-          "rect": [180, 120, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [180, 60, 20, 20],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [80, 120, 20, 20],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGPath polygon id='triangle'",
-          "rect": [80, 120, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [80, 60, 20, 20],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGViewportContainer svg id='inner'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'right-aligned text'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGPath polygon id='triangle'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt
deleted file mode 100644
index ddca1b72..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt
+++ /dev/null
@@ -1,98 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [16, 42, 784, 170],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [16, 42, 784, 170],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 42, 784, 170],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 42, 784, 170],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [16, 42, 784, 170],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [16, 42, 784, 170],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [0, 0, 334, 500],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-creation-expected.txt
deleted file mode 100644
index 2d30f2a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-clipPath-creation-expected.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [16, 42, 784, 170],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 42, 784, 170],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [16, 42, 784, 170],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [0, 0, 334, 500],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.png
deleted file mode 100644
index b008652..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt
deleted file mode 100644
index 722759cf..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [0, 15, 756, 364],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 247, 756, 132],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 247, 756, 132],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 130, 595, 133],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 130, 595, 133],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 15, 446, 129],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 15, 446, 129],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceLinearGradient linearGradient id='fillLinearGradient'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGResourceLinearGradient linearGradient id='strokeLinearGradient'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Gradient on fill'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Gradient on stroke'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Gradient on fill/stroke'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-creation-expected.txt
deleted file mode 100644
index f703958c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-gradient-creation-expected.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [33, 23, 697, 194],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [33, 23, 697, 194],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Gradient on fill'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGResourceLinearGradient linearGradient id='dynGrad'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.png
deleted file mode 100644
index 800b472..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt
deleted file mode 100644
index df02fd6..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt
+++ /dev/null
@@ -1,146 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [0, 15, 680, 364],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 247, 680, 132],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 247, 680, 132],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 130, 519, 133],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 130, 519, 133],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 15, 370, 129],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 15, 370, 129],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [16, 16, 18, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [16, 16, 18, 18],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [8, 8, 17, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [8, 8, 17, 17],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourcePattern pattern id='fillPattern'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGResourcePattern pattern id='strokePattern'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Pattern on fill'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Pattern on stroke'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Pattern on fill/stroke'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-creation-expected.txt
deleted file mode 100644
index cca64e7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-pattern-creation-expected.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [33, 23, 622, 194],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [33, 23, 622, 194],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [16, 25, 18, 25],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [8, 12, 17, 26],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Pattern on fill'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGResourcePattern pattern id='dynPattern'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt
deleted file mode 100644
index 511b6aa..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt
+++ /dev/null
@@ -1,132 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='modify'",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [10, 63, 307, 377],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='modify'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt
deleted file mode 100644
index 91fab0e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [23, 8, 85, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='target'",
-          "rect": [23, 8, 85, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [58, 45, 50, 26],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='source'",
-          "rect": [58, 45, 50, 26],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text id='target'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' B C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGText text id='source'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'X Y Z'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/outline-offset-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/outline-offset-text-expected.txt
deleted file mode 100644
index e13d392..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/outline-offset-text-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [103, 26, 160, 113],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [103, 26, 160, 113],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [63, 26, 160, 113],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [63, 26, 160, 113],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Foo'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/paintorder-filtered-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/paintorder-filtered-expected.png
deleted file mode 100644
index 297f9f97..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/paintorder-filtered-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-expected.png
deleted file mode 100644
index e8d3e49..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-expected.txt
deleted file mode 100644
index 8a66db7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 72, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [9, 73, 400, 400],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [9, 73, 400, 400],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.png
deleted file mode 100644
index d61037d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt
deleted file mode 100644
index c479a6b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 72, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [47, 111, 324, 324],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [48, 112, 322, 322],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [8, 154, 102, 238],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [9, 155, 100, 236],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.png
deleted file mode 100644
index dc58ac3..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt
deleted file mode 100644
index 31e8127..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt
+++ /dev/null
@@ -1,121 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 72, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='targetUse'",
-          "rect": [209, 273, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [209, 273, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [209, 273, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [209, 273, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use id='targetUse'",
-          "rect": [109, 173, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [109, 173, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [9, 173, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='targetUse'",
-          "rect": [59, 273, 50, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [59, 273, 50, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [59, 273, 50, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [59, 273, 50, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use id='targetUse'",
-          "rect": [34, 173, 50, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [34, 173, 50, 200],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use id='targetUse'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g id='targetUse'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.png
deleted file mode 100644
index 0566b8fa..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.txt
deleted file mode 100644
index e7a73e93..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-image-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 72, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGImage image",
-          "rect": [9, 73, 400, 400],
-          "reason": "image"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [9, 73, 400, 400],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGImage image",
-      "reason": "image"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.png
deleted file mode 100644
index 973cef02..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.txt
deleted file mode 100644
index 5c444a2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-inner-svg-expected.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 52, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [27, 69, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [27, 69, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [27, 69, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [13, 207, 92, 91],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [13, 207, 92, 91],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [13, 207, 92, 91],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.png
deleted file mode 100644
index 500773b4..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt
deleted file mode 100644
index 10dedc8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 72, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [9, 73, 400, 400],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [209, 273, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [209, 273, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [9, 273, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='targetUse'",
-          "rect": [9, 73, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [9, 73, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use id='targetUse'",
-          "rect": [9, 73, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect1'",
-          "rect": [9, 73, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect1'",
-          "rect": [9, 73, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect1'",
-          "rect": [9, 73, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [59, 273, 50, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [59, 273, 50, 200],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect1'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use id='targetUse'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect1'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g id='targetUse'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='targetRect1'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.png
deleted file mode 100644
index a812c5d2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt
deleted file mode 100644
index 11e00d1..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 72, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [9, 73, 400, 400],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [9, 73, 400, 400],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='targetSymbol'",
-          "rect": [9, 73, 400, 400],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [209, 273, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [9, 73, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [59, 273, 50, 50],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='targetSymbol'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.png
deleted file mode 100644
index 1071d5c1..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt
deleted file mode 100644
index 6e26041..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 52, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [45, 87, 328, 328],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [45, 87, 328, 328],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [45, 87, 328, 328],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
-          "rect": [45, 87, 328, 328],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [16, 59, 136, 137],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [18, 211, 82, 83],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [18, 211, 82, 83],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [18, 211, 82, 83],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
-          "rect": [18, 211, 82, 83],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.png
deleted file mode 100644
index 973cef02..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt
deleted file mode 100644
index bdacfa0..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 52, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [27, 69, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [27, 69, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [27, 69, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
-          "rect": [27, 69, 364, 364],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [16, 59, 136, 137],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [13, 207, 92, 91],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [13, 207, 92, 91],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [13, 207, 92, 91],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
-          "rect": [13, 207, 92, 91],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/remove-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/remove-outline-property-on-root-expected.txt
deleted file mode 100644
index d76bf880..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/remove-outline-property-on-root-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 784, 105],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [-2, -2, 120, 120],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt
deleted file mode 100644
index 9a82b8ab..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt
+++ /dev/null
@@ -1,129 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 377],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='modify'",
-          "rect": [10, 63, 307, 377],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [10, 63, 307, 377],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='modify'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/remove-tspan-from-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/remove-tspan-from-text-expected.txt
deleted file mode 100644
index 0f34e267..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/remove-tspan-from-text-expected.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 257],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 257],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 257],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 257],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 63, 307, 257],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 63, 307, 257],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [10, 63, 307, 257],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='remove'",
-          "rect": [10, 63, 307, 257],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text id='text'",
-          "rect": [10, 63, 307, 257],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='remove'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox ' '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt
deleted file mode 100644
index 7d6e5160..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [9, 13, 46, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [9, 13, 46, 28],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGText text id='t'",
-          "rect": [9, 13, 46, 28],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGText text id='t'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Hello'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt
deleted file mode 100644
index 7d6e5160..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [9, 13, 46, 28],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [9, 13, 46, 28],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGText text id='t'",
-          "rect": [9, 13, 46, 28],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGText text id='t'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'Hello'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
deleted file mode 100644
index 5710651..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
deleted file mode 100644
index fb8a647..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ /dev/null
@@ -1,106 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [1026, 1036],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [24, 1011, 737, 21],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [177, 1012, 203, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [435, 1012, 173, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline A",
-          "rect": [384, 1011, 47, 21],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [385, 1012, 45, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [429, 1012, 7, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [379, 1012, 7, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'pservers-pattern-01-b \u2190'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline A",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'index'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u2192 script-handle-01-b'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.png
deleted file mode 100644
index d69c49e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.txt
deleted file mode 100644
index 7707a369..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/svg-background-partial-redraw-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='revealer'",
-          "rect": [9, 153, 200, 100],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='revealer'",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.png
deleted file mode 100644
index 7843ecf54c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.txt
deleted file mode 100644
index 47c47468..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/svg-image-change-content-size-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 52, 602, 422],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage img",
-          "rect": [9, 53, 420, 420],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage img",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.png
deleted file mode 100644
index 7733c19..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.txt
deleted file mode 100644
index 01a9e7a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/tabgroup-expected.txt
+++ /dev/null
@@ -1,2186 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [389, 37, 316, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [389, 37, 316, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [389, 37, 316, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [389, 37, 316, 82],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRound'",
-          "rect": [390, 38, 314, 80],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [262, 278, 303, 303],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [262, 278, 303, 303],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [262, 278, 303, 303],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [262, 278, 303, 303],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectRound'",
-          "rect": [263, 279, 301, 301],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [506, 232, 238, 161],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [506, 232, 238, 161],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [506, 232, 238, 161],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [506, 232, 238, 161],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [6, 256, 238, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [6, 256, 238, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [6, 256, 238, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [6, 256, 238, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectTriangle'",
-          "rect": [507, 233, 236, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupTriangle'",
-          "rect": [7, 257, 236, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='contentTabGroupTriangle0'",
-          "rect": [15, 291, 211, 37],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [31, 404, 188, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [23, 146, 188, 10],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [37, 404, 176, 98],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [29, 147, 176, 97],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [39, 404, 172, 96],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [31, 146, 172, 96],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [37, 6, 160, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [37, 6, 160, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [37, 6, 160, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [37, 6, 160, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRect'",
-          "rect": [38, 7, 158, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 291, 150, 25],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [15, 291, 150, 25],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [15, 291, 150, 25],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [15, 291, 150, 25],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [7, 33, 150, 25],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [7, 33, 150, 25],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [7, 33, 150, 25],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [7, 33, 150, 25],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__1'",
-          "rect": [61, 256, 67, 31],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__0'",
-          "rect": [506, 232, 66, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__0'",
-          "rect": [389, 37, 66, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
-          "rect": [362, 278, 65, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__1'",
-          "rect": [568, 232, 65, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__1'",
-          "rect": [451, 37, 65, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__1'",
-          "rect": [414, 331, 64, 63],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-          "rect": [6, 256, 58, 31],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [66, 257, 57, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [66, 257, 57, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [66, 257, 57, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [66, 257, 57, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [66, 257, 57, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [511, 234, 56, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [511, 234, 56, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [511, 234, 56, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [394, 38, 56, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [394, 38, 56, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [394, 38, 56, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__2'",
-          "rect": [125, 256, 54, 31],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [574, 234, 54, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [574, 234, 54, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [574, 234, 54, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [457, 38, 54, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [457, 38, 54, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [457, 38, 54, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__3'",
-          "rect": [506, 422, 53, 54],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__2'",
-          "rect": [466, 382, 52, 52],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__3'",
-          "rect": [674, 232, 51, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [370, 285, 50, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [370, 285, 50, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [370, 285, 50, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__3'",
-          "rect": [557, 37, 50, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [422, 337, 49, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [422, 337, 49, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [422, 337, 49, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
-          "rect": [629, 232, 49, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [11, 257, 48, 29],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [11, 257, 48, 29],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [11, 257, 48, 29],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [11, 257, 48, 29],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [11, 257, 48, 29],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__2'",
-          "rect": [512, 37, 48, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [130, 257, 44, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [130, 257, 44, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [130, 257, 44, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [130, 257, 44, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [130, 257, 44, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__3'",
-          "rect": [175, 256, 43, 31],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [679, 234, 40, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [679, 234, 40, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [679, 234, 40, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [562, 38, 40, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [562, 38, 40, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [562, 38, 40, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [513, 429, 39, 39],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [513, 429, 39, 39],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [513, 429, 39, 39],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [473, 389, 38, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [473, 389, 38, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [473, 389, 38, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [635, 234, 38, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [635, 234, 38, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [635, 234, 38, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [517, 38, 38, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [517, 38, 38, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [517, 38, 38, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [181, 257, 32, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [181, 257, 32, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [181, 257, 32, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [181, 257, 32, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [181, 257, 32, 29],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__0'",
-          "rect": [178, 6, 19, 66],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__1'",
-          "rect": [178, 68, 19, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__3'",
-          "rect": [178, 174, 19, 51],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__2'",
-          "rect": [178, 129, 19, 49],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [180, 11, 16, 56],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [180, 11, 16, 56],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [180, 11, 16, 56],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [180, 74, 16, 54],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [180, 74, 16, 54],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [180, 74, 16, 54],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [180, 179, 16, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [180, 179, 16, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [180, 179, 16, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [180, 135, 16, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [180, 135, 16, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [180, 135, 16, 38],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__1'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Geodata'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Browser'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Download'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Folder'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Your'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Account'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__0_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Help'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox '& Info'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__1'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Biography'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__0_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Portrait'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRect__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Relations'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupTriangle'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Download'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Folder'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is oversize content that can be'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'hidden on tab-change'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Your'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Account'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Help'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox '& Info'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Geodata'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Browser'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='contentTabGroupTriangle0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is a tabgroup with triangular tab corners'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'and a double line tab. (use \"\\n\" as a line separator)'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Click on the second tab to see oversize content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Biography'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__0_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Relations'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Portrait'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Biography'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__0_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Portrait'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRound__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Relations'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__1'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Relations'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__1_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__2'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__2_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__3'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Portrait'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__3_content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Biography'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-dom-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-dom-removal-expected.txt
deleted file mode 100644
index ce8a718..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-dom-removal-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='objectsToRemove'",
-          "rect": [0, 0, 201, 129],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [50, 110, 151, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [50, 110, 151, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 20, 20],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='objectsToRemove'",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-mask-update-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-mask-update-expected.txt
deleted file mode 100644
index 2a5d70a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-mask-update-expected.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 3, 46, 22],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 3, 46, 22],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGText text id='text1'",
-          "rect": [10, 3, 46, 22],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [10, 33, 41, 22],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text id='text2'",
-          "rect": [10, 33, 41, 22],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 33, 41, 17],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text1'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='text2'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.png
deleted file mode 100644
index 2f584e33..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.txt
deleted file mode 100644
index fdb836b5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-repaint-including-stroke-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 0, 550, 117],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text id='bounce'",
-          "rect": [80, 0, 550, 117],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [30, 0, 403, 59],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text id='bounce'",
-          "rect": [30, 0, 403, 59],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text id='bounce'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Repaint me!'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text id='bounce'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Repaint me!'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale-expected.txt
deleted file mode 100644
index c531206..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-rescale-expected.txt
+++ /dev/null
@@ -1,384 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='text2g'",
-          "rect": [0, 63, 402, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g id='text1g'",
-          "rect": [0, 13, 402, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='text3g'",
-          "rect": [0, 113, 402, 87],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 114, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 114, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 114, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [0, 114, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 114, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 14, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 14, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 14, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [0, 14, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 14, 193, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [210, 13, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [210, 113, 100, 87],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [210, 113, 100, 48],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [210, 13, 100, 48],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [310, 114, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [310, 114, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [310, 114, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [310, 14, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [310, 14, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [310, 14, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [210, 114, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [210, 14, 92, 46],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='text3g'",
-          "rect": [0, 3, 14, 4],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 3, 7, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 3, 7, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [0, 3, 7, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [0, 3, 7, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [0, 3, 7, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [9, 3, 5, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [9, 3, 5, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [9, 3, 5, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [6, 3, 4, 4],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [6, 3, 4, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [6, 3, 4, 2],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='text1g'",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 0, 1, 1],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g id='text1g'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS '",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGForeignObject foreignObject",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGContainer g id='text2g'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGContainer g id='text3g'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS '",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGForeignObject foreignObject",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-selection-text-05-t-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-selection-text-05-t-expected.png
deleted file mode 100644
index 4172c83..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-selection-text-05-t-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-viewbox-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-viewbox-rescale-expected.txt
deleted file mode 100644
index e392b91..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-viewbox-rescale-expected.txt
+++ /dev/null
@@ -1,146 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 143, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 143, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [59, 143, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [59, 143, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='inner2'",
-          "rect": [59, 143, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 43, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 43, 95, 23],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [59, 43, 95, 23],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [59, 43, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [59, 43, 95, 23],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='inner1'",
-          "rect": [59, 43, 95, 23],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGViewportContainer svg id='inner1'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "full"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='inner2'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS '",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "full"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt
deleted file mode 100644
index 0a95217..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [808, 621],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [208, 13, 161, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='ttt'",
-          "rect": [208, 13, 161, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [18, 193, 161, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGText text id='ttt'",
-          "rect": [18, 193, 161, 19],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text id='ttt'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Passes, if text is at 200x20'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt
deleted file mode 100644
index d4d9911..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [200, 185, 240, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='ts'",
-          "rect": [200, 185, 240, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [200, 185, 240, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [20, 5, 240, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan id='ts'",
-          "rect": [20, 5, 240, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [20, 5, 240, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan id='ts'",
-      "reason": "full"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'This text should be at visible at 200,200'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.png
deleted file mode 100644
index fbb5663..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.txt
deleted file mode 100644
index 6b7ce2227..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-clipped-hit-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [90, 115, 59, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text id='status'",
-          "rect": [90, 115, 59, 19],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [90, 115, 43, 19],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text id='status'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Passed'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-event-handler-on-use-element-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-event-handler-on-use-element-expected.png
deleted file mode 100644
index 1a3abeb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-event-handler-on-use-element-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-setAttribute-crash-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-setAttribute-crash-expected.png
deleted file mode 100644
index 242b051c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-setAttribute-crash-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-setAttribute-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-setAttribute-crash-expected.txt
deleted file mode 100644
index d84fc5a9c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/use-setAttribute-crash-expected.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow body",
-          "rect": [8, 8, 784, 205],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse svg:circle id='circle'",
-          "rect": [32, 32, 52, 52],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer svg:use id='use'",
-          "rect": [33, 33, 50, 50],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRoot svg:svg id='svg'",
-          "rect": [33, 33, 50, 50],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='symbol'",
-          "rect": [33, 33, 50, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGEllipse svg:circle id='circle'",
-          "rect": [7, 7, 27, 27],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGEllipse svg:circle id='circle'",
-          "rect": [52, 52, 12, 12],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='symbol'",
-          "rect": [53, 53, 10, 10],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGEllipse svg:circle id='circle'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='symbol'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow body",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg:svg id='svg'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGEllipse svg:circle id='circle'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGContainer svg:use id='use'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='symbol'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGEllipse svg:circle id='circle'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.png
deleted file mode 100644
index ad610ed..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.txt
deleted file mode 100644
index 6ace4ab..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/window-expected.txt
+++ /dev/null
@@ -1,2054 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='Windows'",
-          "rect": [38, 81, 760, 454],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='Windows'",
-          "rect": [38, 92, 760, 443],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [37, 142, 551, 394],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarbigWindow'",
-          "rect": [37, 142, 551, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [37, 522, 551, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='bigWindow'",
-          "rect": [38, 143, 549, 392],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupbigWindow'",
-          "rect": [38, 143, 549, 392],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupbigWindow'",
-          "rect": [38, 143, 549, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [76, 181, 317, 238],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarnestedWindow'",
-          "rect": [76, 181, 317, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [76, 405, 317, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='nestedWindow'",
-          "rect": [77, 182, 315, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupnestedWindow'",
-          "rect": [77, 182, 315, 236],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupnestedWindow'",
-          "rect": [77, 182, 315, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='navWindow'",
-          "rect": [613, 81, 185, 169],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer g id='decoGroupnavWindow'",
-          "rect": [613, 81, 185, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
-          "rect": [613, 81, 185, 159],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='decoGroupMinimizednavWindow'",
-          "rect": [613, 81, 185, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [623, 91, 176, 160],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [76, 194, 176, 145],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarcolourPickerWindow'",
-          "rect": [76, 194, 176, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [623, 237, 176, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [76, 325, 176, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='navWindow'",
-          "rect": [624, 92, 174, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupnavWindow'",
-          "rect": [624, 92, 174, 158],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='colourPickerWindow'",
-          "rect": [77, 195, 174, 143],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupcolourPickerWindow'",
-          "rect": [77, 195, 174, 143],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupcolourPickerWindow'",
-          "rect": [77, 195, 174, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [311, 376, 160, 145],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='textNavWindow'",
-          "rect": [632, 101, 160, 99],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarsmallWindow'",
-          "rect": [311, 376, 160, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [311, 507, 160, 14],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='smallWindow'",
-          "rect": [312, 377, 158, 143],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupsmallWindow'",
-          "rect": [312, 377, 158, 143],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupsmallWindow'",
-          "rect": [312, 377, 158, 16],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [248, 343, 145, 66],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='titleBarstatusWindow'",
-          "rect": [248, 343, 145, 17],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='statusWindow'",
-          "rect": [249, 344, 143, 64],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupstatusWindow'",
-          "rect": [249, 344, 143, 64],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupstatusWindow'",
-          "rect": [249, 344, 143, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='textSmallWindow'",
-          "rect": [320, 398, 136, 65],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 326, 136, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [80, 326, 136, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 182, 131, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [80, 182, 131, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [38, 475, 121, 50],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 406, 121, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [80, 406, 121, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='minimalWindow'",
-          "rect": [39, 476, 119, 48],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowMainGroupminimalWindow'",
-          "rect": [39, 476, 119, 48],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [257, 364, 118, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [257, 364, 118, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [257, 364, 118, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [257, 364, 118, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [257, 364, 118, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [257, 364, 118, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='textStatusWindow'",
-          "rect": [257, 364, 118, 40],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [43, 480, 114, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [43, 480, 114, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [43, 480, 114, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [43, 480, 114, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [43, 480, 114, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [43, 480, 114, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='textMinimalWindow'",
-          "rect": [43, 480, 114, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [41, 524, 98, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [41, 524, 98, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [314, 508, 87, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [314, 508, 87, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [252, 344, 75, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [252, 344, 75, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [314, 378, 69, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [314, 378, 69, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [80, 196, 64, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [80, 196, 64, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [41, 143, 59, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [41, 143, 59, 15],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
-          "rect": [757, 94, 36, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [627, 238, 33, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [627, 238, 33, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [613, 81, 16, 159],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [616, 153, 13, 81],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [616, 153, 13, 81],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [768, 93, 13, 13],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [768, 93, 13, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [557, 144, 13, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [362, 183, 13, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [440, 379, 13, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [375, 345, 13, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [376, 183, 12, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [376, 183, 12, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [782, 94, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [782, 94, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [782, 94, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [782, 94, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [615, 99, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [615, 83, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [615, 83, 12, 12],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [571, 144, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [571, 144, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [454, 379, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [454, 379, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [235, 197, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [235, 197, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [222, 197, 12, 12],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [427, 387, 12, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [349, 192, 12, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [615, 123, 12, 3],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-          "rect": [769, 94, 11, 11],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-          "rect": [769, 94, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [769, 94, 11, 11],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [769, 94, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonbigWindow'",
-          "rect": [558, 145, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [558, 145, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonnestedWindow'",
-          "rect": [363, 184, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [363, 184, 11, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonsmallWindow'",
-          "rect": [441, 380, 11, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [441, 380, 11, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonstatusWindow'",
-          "rect": [376, 346, 11, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [376, 346, 11, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [756, 102, 11, 4],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [756, 102, 11, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [545, 153, 11, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [209, 205, 11, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [363, 354, 11, 3],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonnestedWindow'",
-          "rect": [377, 184, 10, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [377, 184, 10, 11],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-          "rect": [783, 95, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-          "rect": [783, 95, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [783, 95, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [783, 95, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-          "rect": [616, 100, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [616, 100, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-          "rect": [616, 84, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [616, 84, 10, 10],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [616, 84, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonbigWindow'",
-          "rect": [572, 145, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [572, 145, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtonsmallWindow'",
-          "rect": [455, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [455, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [455, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonsmallWindow'",
-          "rect": [428, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [428, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [428, 380, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonnestedWindow'",
-          "rect": [350, 185, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [350, 185, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='closeButtoncolourPickerWindow'",
-          "rect": [236, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [236, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='closeButton'",
-          "rect": [236, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='maximizeButtoncolourPickerWindow'",
-          "rect": [223, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-          "rect": [223, 198, 10, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [783, 95, 10, 9],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [783, 95, 10, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-          "rect": [616, 116, 10, 9],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [616, 116, 10, 9],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [616, 116, 10, 9],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [572, 146, 10, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [350, 185, 10, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-          "rect": [757, 95, 9, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-          "rect": [757, 95, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [757, 95, 9, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [757, 95, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonbigWindow'",
-          "rect": [546, 146, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [546, 146, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtonstatusWindow'",
-          "rect": [364, 346, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [364, 346, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [364, 346, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use id='minimizeButtoncolourPickerWindow'",
-          "rect": [210, 198, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [210, 198, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-          "rect": [210, 198, 9, 10],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [757, 95, 9, 9],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [757, 95, 9, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [546, 146, 9, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [377, 185, 9, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [-1, 20, 7, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [-1, 20, 7, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [-1, 20, 7, 13],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath line",
-          "rect": [-1, 29, 7, 4],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 22, 5, 9],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 22, 5, 9],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGHiddenContainer symbol id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer symbol id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer symbol id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='Windows'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='navWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='textNavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This window should'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'contain navigation tools'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Click on button'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox ''Resize Navigation Window' for a'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'random resize of this Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Note that this window also'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'features a window decoration'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Statusbar'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='bigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is a big movable window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='nestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This window contains other windows'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='colourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupcolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Changing a colour changes background'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupcolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarcolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Colour Picker'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtoncolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtoncolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtoncolourPickerWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='statusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='textStatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is a none-moveable'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'none-closeable status'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Status Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonstatusWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Nested middlesize Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonnestedWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='smallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='textSmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This window has a callback'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'function indicating mouse'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'movements in the statusbar'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'and alerting window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'events'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Callback function is active'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Small Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonsmallWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='minimalWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowMainGroupminimalWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='textMinimalWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'This is a minimal window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'without title and status bar.'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'it is also not moveable'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupminimalWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='titleBarbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Big Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonbigWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='Windows'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g id='navWindow'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g id='decoGroupnavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='decoGroupMinimizednavWindow'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'Navigation Window'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='closeButton'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath line",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-coords-viewattr-01-b-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-coords-viewattr-01-b-expected.png
deleted file mode 100644
index 122fc1d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-coords-viewattr-01-b-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-foreignObject-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-foreignObject-expected.png
deleted file mode 100644
index 6b24b0ce82..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/svg/zoom-foreignObject-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table-cell-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table-cell-collapsed-border-expected.txt
deleted file mode 100644
index 2221092..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table-cell-collapsed-border-expected.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [3, 264, 441, 110],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [3, 166, 441, 108],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [3, 364, 441, 105],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 64, 436, 108],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD id='t3'",
-          "rect": [225, 269, 112, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD id='t1'",
-          "rect": [225, 69, 112, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD id='t2'",
-          "rect": [8, 269, 110, 100],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCell TD id='t1'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCell TD id='t2'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCell TD id='t3'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table-cell-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table-cell-move-expected.txt
deleted file mode 100644
index b5db181..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table-cell-move-expected.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 206, 60, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 146, 60, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 326, 60, 60],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 266, 60, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 206, 60, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 146, 60, 60],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTableCell TD id='s'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table-collapsed-border-expected.txt
deleted file mode 100644
index 2452b49..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table-collapsed-border-expected.txt
+++ /dev/null
@@ -1,377 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTable TABLE",
-          "rect": [8, 194, 103, 82],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableSection TBODY",
-          "rect": [8, 194, 103, 82],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR id='r2'",
-          "rect": [8, 224, 103, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE",
-          "rect": [8, 102, 95, 82],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableSection TBODY",
-          "rect": [8, 102, 95, 82],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 338, 95, 30],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 286, 95, 30],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 154, 95, 30],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 102, 95, 30],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 316, 95, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR id='r'",
-          "rect": [8, 132, 95, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTable TABLE id='t'",
-          "rect": [8, 10, 91, 82],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 62, 91, 30],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 10, 91, 30],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 40, 91, 22],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD id='d2'",
-          "rect": [22, 224, 85, 22],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [22, 338, 77, 26],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [22, 290, 77, 26],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [22, 154, 77, 26],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [22, 106, 77, 26],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='d3'",
-          "rect": [22, 316, 77, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD id='d'",
-          "rect": [22, 132, 77, 22],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 317, 71, 19],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 133, 71, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 339, 46, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 155, 46, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 295, 40, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 111, 40, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 225, 32, 19],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutTable TABLE",
-          "rect": [74, 286, 29, 82],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [12, 224, 10, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [12, 132, 10, 22],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [17, 225, 4, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [17, 133, 4, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTableCell TD id='d'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTableCell TD id='d2'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTable TABLE id='t'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR id='r'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'sit amet'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR id='r2'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u00A0'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'Lorem'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD id='d3'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'ipsum dolor'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'sit amet'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table-shrink-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table-shrink-row-repaint-expected.txt
deleted file mode 100644
index 6795100..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table-shrink-row-repaint-expected.txt
+++ /dev/null
@@ -1,465 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 850],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 850, 785, 200],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutTableCell TD id='resizeMe'",
-          "rect": [8, 117, 769, 205],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 982, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 922, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 862, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 802, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 782, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 742, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 722, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 682, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 662, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 622, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 602, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 562, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 542, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 502, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 482, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 442, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 422, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 382, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 362, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 322, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 302, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 242, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 182, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [8, 122, 769, 60],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 1002, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 942, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 882, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 822, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 802, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 742, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 682, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 622, 16, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 762, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 702, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 642, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 582, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 562, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 522, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 502, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 462, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 442, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 402, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 382, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 342, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 322, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 262, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 202, 8, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [13, 142, 8, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutTableCell TD id='resizeMe'",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '2'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '3'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '4'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '5'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '6'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '7'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '8'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '9'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '10'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '11'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '12'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '13'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt
deleted file mode 100644
index 9d1fa083..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 8, 114, 54],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD id='foo'",
-          "rect": [10, 10, 56, 50],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='blockDiv'",
-          "rect": [90, 30, 20, 20],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [90, 30, 11, 19],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCell TD id='foo'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='blockDiv'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.png
deleted file mode 100644
index 68435226..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.txt
deleted file mode 100644
index 0764dcc3..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COL id='target'",
-          "rect": [8, 28, 184, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [71, 96],
-      "bounds": [58, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COL id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.png
deleted file mode 100644
index 68435226..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt
deleted file mode 100644
index 0764dcc3..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COL id='target'",
-          "rect": [8, 28, 184, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [71, 96],
-      "bounds": [58, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COL id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.png
deleted file mode 100644
index b82f195..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.txt
deleted file mode 100644
index 1e45130a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-expected.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COL id='target'",
-          "rect": [8, 28, 184, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [71, 96],
-      "bounds": [58, 64],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [131, 96],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COL id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.png
deleted file mode 100644
index b82f195..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt
deleted file mode 100644
index 1e45130a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COL id='target'",
-          "rect": [8, 28, 184, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [71, 96],
-      "bounds": [58, 64],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [131, 96],
-      "bounds": [59, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COL id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.png
deleted file mode 100644
index 68435226..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.txt
deleted file mode 100644
index 524341c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COLGROUP id='target'",
-          "rect": [8, 28, 184, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD id='target'",
-      "position": [71, 96],
-      "bounds": [58, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COLGROUP id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.png
deleted file mode 100644
index 68435226..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt
deleted file mode 100644
index 524341c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCol COLGROUP id='target'",
-          "rect": [8, 28, 184, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD id='target'",
-      "position": [71, 96],
-      "bounds": [58, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCol COLGROUP id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.png
deleted file mode 100644
index b04d774..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.txt
deleted file mode 100644
index f6ccb23f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableRow TR id='target'",
-      "position": [8, 96],
-      "bounds": [184, 64],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR id='target'",
-          "rect": [0, 0, 184, 64],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [63, 0],
-      "bounds": [58, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.png
deleted file mode 100644
index b04d774..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt
deleted file mode 100644
index f6ccb23f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableRow TR id='target'",
-      "position": [8, 96],
-      "bounds": [184, 64],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR id='target'",
-          "rect": [0, 0, 184, 64],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [63, 0],
-      "bounds": [58, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.png
deleted file mode 100644
index b04d774..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.txt
deleted file mode 100644
index 8ca944d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-expected.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR id='target'",
-          "rect": [8, 96, 184, 64],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [71, 96],
-      "bounds": [58, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.png
deleted file mode 100644
index b04d774..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.txt
deleted file mode 100644
index 8ca944d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-initial-empty-expected.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR id='target'",
-          "rect": [8, 96, 184, 64],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [71, 96],
-      "bounds": [58, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.png
deleted file mode 100644
index 0468ab2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt
deleted file mode 100644
index 1faa0f8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableSection TBODY id='target'",
-      "position": [8, 28],
-      "bounds": [184, 134],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableSection TBODY id='target'",
-          "rect": [0, 0, 184, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableRow TR",
-      "position": [0, 68],
-      "bounds": [184, 64],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [63, 0],
-      "bounds": [58, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.png
deleted file mode 100644
index 0468ab2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt
deleted file mode 100644
index 1faa0f8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableSection TBODY id='target'",
-      "position": [8, 28],
-      "bounds": [184, 134],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableSection TBODY id='target'",
-          "rect": [0, 0, 184, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableRow TR",
-      "position": [0, 68],
-      "bounds": [184, 64],
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [63, 0],
-      "bounds": [58, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.png
deleted file mode 100644
index 0468ab2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.txt
deleted file mode 100644
index 488d0669..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableSection TBODY id='target'",
-      "position": [8, 28],
-      "bounds": [184, 134],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableSection TBODY id='target'",
-          "rect": [0, 0, 184, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [63, 68],
-      "bounds": [58, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.png
deleted file mode 100644
index 0468ab2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt
deleted file mode 100644
index 488d0669..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutTableSection TBODY id='target'",
-      "position": [8, 28],
-      "bounds": [184, 134],
-      "drawsContent": true,
-      "backgroundColor": "#ADD8E6",
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableSection TBODY id='target'",
-          "rect": [0, 0, 184, 134],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "LayoutTableCell TD",
-      "position": [63, 68],
-      "bounds": [58, 64],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableSection TBODY id='target'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt
deleted file mode 100644
index c2a1999e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt
+++ /dev/null
@@ -1,114 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [0, 52, 106, 238],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [0, 292, 106, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [0, 100, 106, 190],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [0, 102, 106, 46],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 52, 102, 238],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 292, 102, 236],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 102, 102, 46],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 400, 45, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 161, 45, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 115, 45, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 66, 45, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "invalidate paint rectangle"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ROW1'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'ROW2'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt
deleted file mode 100644
index edda347..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 52, 102, 476],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 280, 59, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 90, 59, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'MIDDLE'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-row-repaint-expected.txt
deleted file mode 100644
index 504929a5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/table/resize-table-row-repaint-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 102, 102, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 192, 59, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [3, 142, 59, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'MIDDLE'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-in-relative-positioned-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-in-relative-positioned-inline-expected.txt
deleted file mode 100644
index a01ad78..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-in-relative-positioned-inline-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [108, 8, 684, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='target'",
-          "rect": [8, 8, 200, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 8, 200, 100],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN id='target'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.png
deleted file mode 100644
index 1ae5695..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.txt
deleted file mode 100644
index 0327b11..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-match-document-change-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='to-be-changed'",
-          "rect": [18, 130, 269, 40],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 130, 235, 39],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [18, 130, 77, 19],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [295, 102, 15, 400],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='to-be-changed'",
-      "reason": "full"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'After change'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.png
deleted file mode 100644
index ff7246d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.txt
deleted file mode 100644
index 7b95a4c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-shadow-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x562
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 164x19
-          text run at (0,0) width 164: "This is a regression test for "
-        LayoutInline {I} at (0,0) size 602x19
-          LayoutInline {A} at (0,0) size 350x19 [color=#0000EE]
-            LayoutText {#text} at (164,0) size 350x19
-              text run at (164,0) width 350: "http://bugzilla.opendarwin.org/show_bug.cgi?id=7301"
-          LayoutText {#text} at (513,0) size 253x19
-            text run at (513,0) width 5: " "
-            text run at (517,0) width 249: "Text shadow does not repaint correctly"
-        LayoutText {#text} at (765,0) size 5x19
-          text run at (765,0) width 5: "."
-      LayoutBlockFlow {DIV} at (30,68) size 724x21
-        LayoutInline {SPAN} at (0,0) size 199x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 199x20
-            text run at (0,0) width 199: "Lorem ipsum dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,119) size 724x21
-        LayoutInline {SPAN} at (0,0) size 199x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 199x20
-            text run at (0,0) width 199: "Lorem ipsum dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,170) size 724x21
-        LayoutText {#text} at (0,1) size 83x19
-          text run at (0,1) width 83: "Lorem ipsum "
-        LayoutInline {SPAN} at (0,0) size 98x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (83,0) size 98x20
-            text run at (83,0) width 98: "dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,221) size 724x21
-        LayoutInline {SPAN} at (0,0) size 96x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 96x20
-            text run at (0,0) width 96: "Lorem ipsum"
-        LayoutText {#text} at (96,1) size 86x19
-          text run at (96,1) width 86: " dolor sit amet"
-layer at (8,44) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,36) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.png
deleted file mode 100644
index ff7246d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.txt
deleted file mode 100644
index 7b95a4c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/text-shadow-horizontal-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutBlockFlow {HTML} at (0,0) size 800x600
-    LayoutBlockFlow {BODY} at (8,8) size 784x562
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 164x19
-          text run at (0,0) width 164: "This is a regression test for "
-        LayoutInline {I} at (0,0) size 602x19
-          LayoutInline {A} at (0,0) size 350x19 [color=#0000EE]
-            LayoutText {#text} at (164,0) size 350x19
-              text run at (164,0) width 350: "http://bugzilla.opendarwin.org/show_bug.cgi?id=7301"
-          LayoutText {#text} at (513,0) size 253x19
-            text run at (513,0) width 5: " "
-            text run at (517,0) width 249: "Text shadow does not repaint correctly"
-        LayoutText {#text} at (765,0) size 5x19
-          text run at (765,0) width 5: "."
-      LayoutBlockFlow {DIV} at (30,68) size 724x21
-        LayoutInline {SPAN} at (0,0) size 199x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 199x20
-            text run at (0,0) width 199: "Lorem ipsum dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,119) size 724x21
-        LayoutInline {SPAN} at (0,0) size 199x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 199x20
-            text run at (0,0) width 199: "Lorem ipsum dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,170) size 724x21
-        LayoutText {#text} at (0,1) size 83x19
-          text run at (0,1) width 83: "Lorem ipsum "
-        LayoutInline {SPAN} at (0,0) size 98x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (83,0) size 98x20
-            text run at (83,0) width 98: "dolor sit amet"
-        LayoutText {#text} at (0,0) size 0x0
-      LayoutBlockFlow {DIV} at (30,221) size 724x21
-        LayoutInline {SPAN} at (0,0) size 96x20 [bgcolor=#C0C0C0]
-          LayoutText {#text} at (0,0) size 96x20
-            text run at (0,0) width 96: "Lorem ipsum"
-        LayoutText {#text} at (96,1) size 86x19
-          text run at (96,1) width 86: " dolor sit amet"
-layer at (8,44) size 784x2 clip at (0,0) size 0x0
-  LayoutBlockFlow {HR} at (0,36) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
deleted file mode 100644
index b461f467..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.txt
deleted file mode 100644
index 80ed3cde..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/textarea-caret-expected.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [7, 7, 183, 40],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [9, 10, 179, 18],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 175, 16],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [9, 30, 164, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutTextControl TEXTAREA id='editor'",
-          "rect": [173, 30, 15, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl TEXTAREA id='editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTextControl TEXTAREA id='editor'",
-      "reason": "geometry"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "Caret",
-      "reason": "caret"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox '------------------------------------------------------------'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-absolute-in-positioned-container-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-absolute-in-positioned-container-expected.txt
deleted file mode 100644
index 71bccce5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-absolute-in-positioned-container-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [802, 585],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
-          "rect": [76, 190, 286, 286],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-inline-layered-child-expected.txt
deleted file mode 100644
index 9bb7e0e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-inline-layered-child-expected.txt
+++ /dev/null
@@ -1,229 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='box'",
-          "rect": [61, 87, 178, 206],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='child'",
-          "rect": [135, 360, 160, 196],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [135, 361, 159, 195],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='box'",
-          "rect": [100, 100, 100, 180],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutInline (relative positioned) SPAN id='child'",
-          "rect": [300, 300, 80, 179],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [300, 301, 80, 178],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='box'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN id='child'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'A B C'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'D E F'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'G H I'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'J K L'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'M N O'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'P Q R'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'S T U'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'V W X'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Y Z'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='box'",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutInline (relative positioned) SPAN id='child'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'A B C'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'D E F'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'G H I'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'J K L'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'M N O'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'P Q R'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'S T U'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'V W X'",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Y Z'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-layout-repaint-expected.txt
deleted file mode 100644
index a6ac6af..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-layout-repaint-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [40, 50, 208, 118],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [52, 51, 42, 31],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-relative-position-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-relative-position-expected.txt
deleted file mode 100644
index abd3106..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-relative-position-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
-          "rect": [66, 110, 286, 286],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-repaint-descendants-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-repaint-descendants-expected.txt
deleted file mode 100644
index 3959428..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/transform-repaint-descendants-expected.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [176, 220, 394, 185],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [176, 220, 388, 203],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='box'",
-          "rect": [76, 120, 266, 266],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='box'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/vertical-align-length1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/vertical-align-length1-expected.txt
deleted file mode 100644
index b19c97dd..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/vertical-align-length1-expected.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 800, 155],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [20, 0, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [120, 130, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [120, 100, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [0, 130, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [0, 100, 20, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/vertical-align-length2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/vertical-align-length2-expected.txt
deleted file mode 100644
index e238289..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/vertical-align-length2-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 800, 205],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [300, 0, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [0, 0, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [200, 80, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [200, 50, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/vertical-align1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/vertical-align1-expected.txt
deleted file mode 100644
index 67a88df..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/vertical-align1-expected.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 800, 105],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [20, 0, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [120, 80, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [120, 33, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [0, 80, 20, 20],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [0, 33, 20, 20],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/vertical-align2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/vertical-align2-expected.txt
deleted file mode 100644
index 8927c5a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/vertical-align2-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 800, 247],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [300, 0, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='other'",
-          "rect": [0, 0, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [200, 147, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [200, 100, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='other'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/video-paint-invalidation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/video-paint-invalidation-expected.txt
deleted file mode 100644
index 9fa92010..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/video-paint-invalidation-expected.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutVideo VIDEO id='video'",
-      "position": [8, 8],
-      "bounds": [320, 240]
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutFlexibleBox (relative positioned) DIV",
-      "position": [8, 8],
-      "bounds": [320, 240],
-      "drawsContent": true
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)",
-      "position": [8, 8],
-      "bounds": [320, 240],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutVideo VIDEO id='video'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/window-resize-vertical-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/window-resize-vertical-writing-mode-expected.txt
deleted file mode 100644
index e67e6c4..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/invalidation/window-resize-vertical-writing-mode-expected.txt
+++ /dev/null
@@ -1,427 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [939, 235],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 939, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 923, 219],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [9, 7, 921, 213],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [339, 0, 600, 500],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 600, 500],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [339, 235, 600, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [505, 8, 426, 484],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [506, 8, 424, 470],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'BBBB'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'CCCC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'DDDD'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'EEEE'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'FFFF'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'GGGG'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'HHHH'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'IIII JJJJ'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'KKKK'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'LLLL'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'MMMM'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'NNNN'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [939, 235],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [200, 0, 939, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 939, 235],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 939, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [208, 8, 923, 219],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 923, 219],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [209, 7, 921, 213],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [9, 7, 921, 213],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [539, 235, 600, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [539, 235, 400, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAA'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'BBBB'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'CCCC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'DDDD'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'EEEE'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'FFFF'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'GGGG'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'HHHH'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'IIII JJJJ'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'KKKK'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'LLLL'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'MMMM'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'NNNN'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [400, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 939, 235],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [-539, 0, 939, 235],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [-531, 8, 923, 219],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [-530, 7, 921, 213],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 400, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 235, 400, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [37, 8, 355, 584],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [38, 7, 353, 554],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAA BBBB CCCC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'DDDD EEEE FFFF'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'GGGG HHHH IIII JJJJ'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'KKKK LLLL MMMM'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'NNNN'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [400, 0, 400, 600],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [437, 8, 355, 584],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [37, 8, 355, 584],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [438, 7, 353, 554],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [38, 7, 353, 554],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'AAAA BBBB CCCC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'DDDD EEEE FFFF'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'GGGG HHHH IIII JJJJ'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'KKKK LLLL MMMM'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'NNNN'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/printing/print-box-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/printing/print-box-shadow-expected.png
deleted file mode 100644
index 2e24bc09..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/printing/print-box-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png
deleted file mode 100644
index eaf6305b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/roundedrects/input-with-rounded-rect-and-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-expected.txt
deleted file mode 100644
index 4e5ac97..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-inline-block-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x73
-  LayoutBlockFlow {HTML} at (0,0) size 800x73
-    LayoutBlockFlow {BODY} at (8,8) size 784x57
-      LayoutBlockFlow {DIV} at (0,0) size 24x57
-        LayoutText {#text} at (0,1) size 24x55
-          text run at (0,1) width 24: "x"
-      LayoutText {#text} at (24,1) size 22x55
-        text run at (24,1) width 22: "y"
-selection start: position 0 of child 0 {#text} of child 0 {DIV} of body
-selection end:   position 1 of child 1 {#text} of body
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.txt
deleted file mode 100644
index 7038969..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-newline-mixed-ltr-rtl-expected.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x136
-  LayoutBlockFlow {HTML} at (0,0) size 800x136
-    LayoutBlockFlow {BODY} at (8,16) size 784x112
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 321x19
-          text run at (0,0) width 321: "Passes if there are no overpainted selection highlights."
-      LayoutBlockFlow (anonymous) at (0,36) size 784x76
-        LayoutInline {SPAN} at (0,0) size 188x73
-          LayoutText {#text} at (0,1) size 188x73
-            text run at (0,1) width 96: "text"
-            text run at (96,1) width 92 RTL: "\x{645}\x{62A}\x{646}:"
-        LayoutText {#text} at (0,0) size 0x0
-selection start: position 5 of child 0 {#text} of child 2 {SPAN} of body
-selection end:   position 13 of child 0 {#text} of child 2 {SPAN} of body
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png
deleted file mode 100644
index aee99a8a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.txt
deleted file mode 100644
index 803f395..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-newline-rtl-double-linebreak-expected.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x212
-  LayoutBlockFlow {HTML} at (0,0) size 800x212
-    LayoutBlockFlow {BODY} at (8,16) size 784x188
-      LayoutBlockFlow {P} at (0,0) size 784x20
-        LayoutText {#text} at (0,0) size 321x19
-          text run at (0,0) width 321: "Passes if there are no overpainted selection highlights."
-      LayoutBlockFlow {DIV} at (0,36) size 784x152
-        LayoutText {#text} at (756,1) size 28x73
-          text run at (756,1) width 28: "a"
-        LayoutBR {BR} at (756,1) size 0x73
-        LayoutBR {BR} at (784,77) size 0x73
-selection start: position 0 of child 0 {#text} of child 2 {DIV} of body
-selection end:   position 1 of child 1 {BR} of child 2 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
deleted file mode 100644
index 603e24f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
deleted file mode 100644
index b7fff3f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/selection/text-selection-with-composition-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x38
-  LayoutBlockFlow {HTML} at (0,0) size 800x38
-    LayoutBlockFlow {BODY} at (8,8) size 784x22
-      LayoutTextControl {INPUT} at (0,0) size 173x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)]
-      LayoutText {#text} at (0,0) size 0x0
-layer at (10,11) size 169x16
-  LayoutBlockFlow {DIV} at (2,3) size 169x16
-    LayoutText {#text} at (0,0) size 70x16
-      text run at (0,0) width 70: "Hello, world!"
-selection start: position 0 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
-selection end:   position 13 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/spellmarkers/inline_spelling_markers-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/spellmarkers/inline_spelling_markers-expected.png
deleted file mode 100644
index 253eca56..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/disable-spinvalidation/paint/spellmarkers/inline_spelling_markers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.png
index 005e10d..c79b681 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png
deleted file mode 100644
index a1927788..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png
deleted file mode 100644
index 1177c4ef..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
deleted file mode 100644
index 9a16aac..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-anchor-point-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
deleted file mode 100644
index d2e01345..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-animated-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-transition-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-transition-expected.png
deleted file mode 100644
index 7be0eb6..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/compositing/reflections/nested-reflection-transition-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png
deleted file mode 100644
index 53dcac8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/compositing/shadows/shadow-drawing-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/compositing/text-match-highlight-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/compositing/text-match-highlight-expected.png
deleted file mode 100644
index 9f37224..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/compositing/text-match-highlight-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.png
deleted file mode 100644
index 57ef84b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.txt
deleted file mode 100644
index c6d0e9e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-clear-expected.txt
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [299, 123, 474, 394],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.png
deleted file mode 100644
index 862c0b2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt
deleted file mode 100644
index f9f2256d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/japanese-rl-selection-repaint-expected.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [427, 23, 346, 544],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png
deleted file mode 100644
index f6420a5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/repaint-across-writing-mode-boundary-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png
deleted file mode 100644
index bf997ed0..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/shadow-multiple-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-shadow-expected.png
deleted file mode 100644
index 4d593408..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
deleted file mode 100644
index ab66168..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
deleted file mode 100644
index 25864979..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ /dev/null
@@ -1,106 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [1026, 1036],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [24, 1011, 737, 21],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [177, 1012, 202, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [435, 1012, 173, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutInline A",
-          "rect": [384, 1011, 46, 21],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [385, 1012, 44, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [429, 1012, 6, 19],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [379, 1012, 6, 19],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow P",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'pservers-pattern-01-b \u2190'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline A",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'index'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\n'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox '\u2192 script-handle-01-b'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/video-paint-invalidation-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/video-paint-invalidation-expected.txt
deleted file mode 100644
index 71bb46e4..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/disable-spinvalidation/paint/invalidation/video-paint-invalidation-expected.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "children": [
-        {
-          "position": [8, 8],
-          "bounds": [320, 240]
-        },
-        {
-          "shouldFlattenTransform": false,
-          "children": [
-            {
-              "position": [8, 8],
-              "bounds": [320, 240],
-              "drawsContent": true
-            },
-            {
-              "position": [8, 8],
-              "bounds": [320, 240],
-              "drawsContent": true,
-              "paintInvalidations": [
-                {
-                  "object": "LayoutFlexibleBox DIV",
-                  "rect": [96, 223, 81, 2],
-                  "reason": "forced by layout"
-                },
-                {
-                  "object": "LayoutSlider INPUT",
-                  "rect": [96, 223, 81, 2],
-                  "reason": "full"
-                },
-                {
-                  "object": "LayoutBlockFlow DIV id='thumb'",
-                  "rect": [159, 208, 36, 32],
-                  "reason": "full"
-                },
-                {
-                  "object": "LayoutBlockFlow DIV id='thumb'",
-                  "rect": [78, 208, 36, 32],
-                  "reason": "full"
-                },
-                {
-                  "object": "LayoutButton INPUT",
-                  "rect": [195, 208, 32, 32],
-                  "reason": "full"
-                },
-                {
-                  "object": "LayoutButton INPUT",
-                  "rect": [0, 208, 32, 32],
-                  "reason": "full"
-                },
-                {
-                  "object": "LayoutSlider INPUT",
-                  "rect": [245, 223, 25, 2],
-                  "reason": "full"
-                },
-                {
-                  "object": "LayoutBlockFlow (anonymous)",
-                  "rect": [32, 208, 18, 23],
-                  "reason": "invalidate paint rectangle"
-                },
-                {
-                  "object": "LayoutText #text",
-                  "rect": [32, 217, 18, 14],
-                  "reason": "full"
-                },
-                {
-                  "object": "InlineTextBox ''",
-                  "reason": "full"
-                },
-                {
-                  "object": "InlineTextBox '0:00'",
-                  "reason": "full"
-                },
-                {
-                  "object": "RootInlineBox",
-                  "reason": "full"
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/android/fast/rootscroller/README.txt b/third_party/WebKit/LayoutTests/virtual/android/fast/rootscroller/README.txt
new file mode 100644
index 0000000..b183ef81
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/android/fast/rootscroller/README.txt
@@ -0,0 +1,2 @@
+# This suite runs the tests in rootscroller with additional flags.
+# See the virtual_test_suites() method in Tools/Scripts/webkitpy/layout_tests/port/base.py.
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/README.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/README.txt
deleted file mode 100644
index edc3930e..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-# This suite runs the tests in compositing/ with --disable-slimming-paint-invalidation.
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/overflow/nested-render-surfaces-with-rotation-expected.png b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/overflow/nested-render-surfaces-with-rotation-expected.png
deleted file mode 100644
index 7e616b7..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/overflow/nested-render-surfaces-with-rotation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-child-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-child-expected.txt
deleted file mode 100644
index a5e7976c..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-child-expected.txt
+++ /dev/null
@@ -1,165 +0,0 @@
-CASE 1, original layer tree
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
-      "position": [100, 100],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#0000FF"
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
-      "position": [20, 20],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#00FF00",
-      "transform": [
-        [0.707106781186548, 0.707106781186548, 0, 0],
-        [-0.707106781186548, 0.707106781186548, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
-      "position": [180, 180],
-      "bounds": [100, 100],
-      "drawsContent": true
-    }
-  ]
-}
-CASE 2, hovering over the outer div
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
-      "position": [100, 100],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#0000FF"
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
-      "position": [20, 20],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#008000",
-      "transform": [
-        [0.707106781186548, 0.707106781186548, 0, 0],
-        [-0.707106781186548, 0.707106781186548, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ],
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
-          "rect": [0, 0, 100, 100],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
-      "position": [180, 180],
-      "bounds": [100, 100],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
-      "reason": "style change"
-    }
-  ]
-}
-CASE 3, hovering over the inner div
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
-      "position": [100, 100],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#0000FF"
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
-      "position": [20, 20],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#008000",
-      "transform": [
-        [0.707106781186548, 0.707106781186548, 0, 0],
-        [-0.707106781186548, 0.707106781186548, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ],
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
-          "rect": [0, 0, 100, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='smallbox'",
-          "rect": [20, 25, 50, 50],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
-      "position": [180, 180],
-      "bounds": [100, 100],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='smallbox'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
deleted file mode 100644
index d2a68910..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
+++ /dev/null
@@ -1,165 +0,0 @@
-CASE 1, original layer tree
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
-      "position": [100, 100],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#0000FF"
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
-      "position": [20, 20],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#00FF00",
-      "transform": [
-        [0.927183854566787, 0.374606593415912, 0, 0],
-        [-0.374606593415912, 0.927183854566787, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
-      "position": [180, 180],
-      "bounds": [100, 100],
-      "drawsContent": true
-    }
-  ]
-}
-CASE 2, hovering over the outer div
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
-      "position": [100, 100],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#0000FF"
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
-      "position": [20, 20],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#008000",
-      "transform": [
-        [0.927183854566787, 0.374606593415912, 0, 0],
-        [-0.374606593415912, 0.927183854566787, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ],
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
-          "rect": [0, 0, 100, 100],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
-      "position": [180, 180],
-      "bounds": [100, 100],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
-      "reason": "style change"
-    }
-  ]
-}
-CASE 3, hovering over the inner div
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
-      "position": [100, 100],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#0000FF"
-    },
-    {
-      "name": "Squashing Containment Layer",
-      "shouldFlattenTransform": false
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
-      "position": [20, 20],
-      "bounds": [100, 100],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#008000",
-      "transform": [
-        [0.927183854566787, 0.374606593415912, 0, 0],
-        [-0.374606593415912, 0.927183854566787, 0, 0],
-        [0, 0, 1, 0],
-        [0, 0, 0, 1]
-      ],
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
-          "rect": [0, 0, 100, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='smallbox'",
-          "rect": [12, 17, 66, 66],
-          "reason": "style change"
-        }
-      ]
-    },
-    {
-      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
-      "position": [180, 180],
-      "bounds": [100, 100],
-      "drawsContent": true
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='smallbox'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/README.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/README.txt
deleted file mode 100644
index 4304347b..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-# This suite runs the tests in paint/ with --disable-slimming-paint-invalidation.
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/absolute-position-change-containing-block-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/absolute-position-change-containing-block-expected.txt
deleted file mode 100644
index b7e4583..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/absolute-position-change-containing-block-expected.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 784, 2000],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "rect": [108, 5100, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "rect": [100, 100, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='container' class='fixed blue'",
-          "rect": [8, 5000, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container' class='fixed blue'",
-          "rect": [8, 8, 100, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='container' class='fixed blue'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container' class='fixed blue'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container' class='fixed blue'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/add-table-overpaint-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/add-table-overpaint-expected.txt
deleted file mode 100644
index 2bf62fd..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/add-table-overpaint-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [0, 312, 800, 156],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTable TABLE",
-          "rect": [0, 312, 156, 156],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTableSection TBODY",
-          "rect": [0, 312, 156, 156],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [0, 314, 156, 152],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [2, 314, 152, 152],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-replaced-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-replaced-expected.txt
deleted file mode 100644
index b1d114df..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/block-layout-inline-children-replaced-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target' class='target'",
-          "rect": [0, 116, 402, 152],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [151, 117, 100, 100],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target' class='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/border-radius-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/border-radius-repaint-2-expected.txt
deleted file mode 100644
index f11ac874..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/border-radius-repaint-2-expected.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [874, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backgroundColor": "#3F3F3F",
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 600, 874, 180],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 8, 866, 764],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 224, 784, 548],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [137, 88, 607, 604],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/box-shadow-inset-repaint-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/box-shadow-inset-repaint-expected.txt
deleted file mode 100644
index 5eb0ba73..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/box-shadow-inset-repaint-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "rect": [8, 8, 230, 130],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [23, 23, 100, 100],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-descendants-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-descendants-expected.txt
deleted file mode 100644
index ce5ebd7a..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-descendants-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (positioned) DIV id='composited-box'",
-      "position": [38, 38],
-      "bounds": [20, 70],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backfaceVisibility": "hidden",
-      "backgroundColor": "#008000",
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='composited-box'",
-          "rect": [-30, -30, 50, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='child'",
-          "rect": [-30, -30, 50, 50],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='composited-box'",
-          "rect": [0, 0, 10, 60],
-          "reason": "full"
-        }
-      ]
-    },
-    {
-      "name": "Child Containment Layer",
-      "bounds": [90, 90]
-    },
-    {
-      "name": "LayoutBlockFlow DIV class='composited child'",
-      "position": [-30, 20],
-      "bounds": [50, 50],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "backfaceVisibility": "hidden",
-      "backgroundColor": "#008000"
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='composited-box'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='child'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/content-into-overflow-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/content-into-overflow-expected.txt
deleted file mode 100644
index 3d842cc..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/content-into-overflow-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [8, 211, 106, 53],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 308, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target3'",
-          "rect": [8, 388, 100, 20],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "rect": [61, 8, 53, 106],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target3'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/create-layer-repaint-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/create-layer-repaint-expected.txt
deleted file mode 100644
index 866d316..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/create-layer-repaint-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
-          "rect": [28, 54, 500, 50],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
-          "rect": [28, 54, 250, 50],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-element-change-columns-repaint-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-element-change-columns-repaint-expected.txt
deleted file mode 100644
index 991af30..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-element-change-columns-repaint-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutGrid DIV class='grid min-content'",
-          "rect": [8, 48, 250, 50],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='sizedToGridArea'",
-          "rect": [58, 48, 50, 50],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutGrid DIV class='grid min-content'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='sizedToGridArea'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-element-change-rows-repaint-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-element-change-rows-repaint-expected.txt
deleted file mode 100644
index 8730123..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/css-grid-layout/grid-element-change-rows-repaint-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutGrid DIV class='grid fit-content'",
-          "rect": [8, 48, 100, 150],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='sizedToGridArea'",
-          "rect": [8, 98, 100, 50],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutGrid DIV class='grid fit-content'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='sizedToGridArea'",
-      "reason": "incremental"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/fixed-table-cell-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/fixed-table-cell-expected.txt
deleted file mode 100644
index d04f948..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/fixed-table-cell-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTable (positioned) TABLE",
-          "rect": [0, 0, 350, 350],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableSection TBODY",
-          "rect": [0, 0, 350, 350],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutTableCell (anonymous)",
-          "rect": [200, 200, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTableCell TD id='moveMe' class='fixed'",
-          "rect": [200, 200, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'",
-          "rect": [50, 200, 100, 100],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD id='moveMe' class='fixed'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTable (positioned) TABLE",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell (anonymous)",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/fixed-table-overflow-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/fixed-table-overflow-expected.txt
deleted file mode 100644
index 4aea44a..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/fixed-table-overflow-expected.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTable (positioned) TABLE",
-          "rect": [0, 0, 200, 200],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableSection TBODY",
-          "rect": [0, 0, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'",
-          "rect": [100, 100, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTableCell (anonymous)",
-          "rect": [100, 100, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTableCell TD id='moveMe' class='fixed'",
-          "rect": [100, 100, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='green'",
-          "rect": [0, 100, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='green'",
-          "rect": [0, 100, 100, 100],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='green'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTableCell TD id='moveMe' class='fixed'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTable (positioned) TABLE",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell (anonymous)",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='green'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/fixed-table-overflow-zindex-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/fixed-table-overflow-zindex-expected.txt
deleted file mode 100644
index 45eec58..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/fixed-table-overflow-zindex-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTable (positioned) TABLE",
-          "rect": [0, 0, 200, 200],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableSection TBODY",
-          "rect": [0, 0, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'",
-          "rect": [100, 100, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTableCell (anonymous)",
-          "rect": [0, 100, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutTableCell TD id='moveMe' class='fixed'",
-          "rect": [0, 100, 100, 100],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell TD id='moveMe' class='fixed'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutTable (positioned) TABLE",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutTableCell (anonymous)",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/fixed-to-relative-position-with-absolute-child-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/fixed-to-relative-position-with-absolute-child-expected.txt
deleted file mode 100644
index 3d89906..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/fixed-to-relative-position-with-absolute-child-expected.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [8, 8, 784, 2000],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "rect": [108, 308, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "rect": [108, 300, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='container' class='fixed blue'",
-          "rect": [8, 208, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='container' class='fixed blue'",
-          "rect": [8, 200, 100, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='container' class='fixed blue'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='container' class='fixed blue'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='container' class='fixed blue'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/inline-relative-positioned-expected.txt
deleted file mode 100644
index b31892b..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/inline-relative-positioned-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [8, 88, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [8, 88, 100, 100],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'a'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/insert-frame-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/insert-frame-expected.txt
deleted file mode 100644
index 559a6677..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/insert-frame-expected.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 800, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutIFrame IFRAME",
-          "rect": [0, 0, 104, 104],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [2, 2, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [2, 2, 100, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [10, 10, 84, 84],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutIFrame IFRAME",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-expected.txt
deleted file mode 100644
index f0b7d56..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target'",
-          "rect": [0, 580, 80, 20],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [0, 580, 80, 20],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt
deleted file mode 100644
index b35e2e8..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target'",
-          "rect": [508, 28, 80, 20],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [508, 28, 80, 20],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/multicol-with-block-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/multicol-with-block-expected.txt
deleted file mode 100644
index 0be81a2..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/multicol-with-block-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [488, 8, 150, 20],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [488, 8, 80, 20],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/negative-shadow-box-expand-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/negative-shadow-box-expand-expected.txt
deleted file mode 100644
index 3171c51..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/negative-shadow-box-expand-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='outer'",
-          "rect": [100, 60, 640, 240],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner2'",
-          "rect": [100, 200, 600, 100],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='outer'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner2'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/outline-containing-image-in-non-standard-mode-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/outline-containing-image-in-non-standard-mode-expected.txt
deleted file mode 100644
index d86d386..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/outline-containing-image-in-non-standard-mode-expected.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "rect": [6, 6, 204, 58],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [8, 8, 200, 50],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutInline SPAN id='target'",
-      "reason": "style change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-auto-in-overflow-auto-scrolled-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-auto-in-overflow-auto-scrolled-expected.txt
deleted file mode 100644
index 5d42637..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-auto-in-overflow-auto-scrolled-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='innerDiv'",
-          "rect": [8, 8, 769, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 8, 300, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 8, 300, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='innerDiv'",
-          "rect": [762, 8, 15, 300],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='innerDiv'",
-      "reason": "subtree"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-in-overflow-hidden-scrolled-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-in-overflow-hidden-scrolled-expected.txt
deleted file mode 100644
index af7f859..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-in-overflow-hidden-scrolled-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV class='innerWrapper'",
-          "rect": [8, 18, 100, 190],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='red'",
-          "rect": [8, 18, 100, 190],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='ucp' class='green'",
-          "rect": [8, 18, 100, 190],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV class='innerWrapper'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='red'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='ucp' class='green'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-yet-scrolled-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-yet-scrolled-expected.txt
deleted file mode 100644
index 35c9ba28..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-yet-scrolled-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='scroller'",
-      "position": [8, 8],
-      "bounds": [302, 302],
-      "drawsContent": true,
-      "backfaceVisibility": "hidden",
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='scroller'",
-          "rect": [0, 0, 302, 302],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [1, 1, 300, 600],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [1, -399, 300, 600],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [1, 601, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [1, 201, 100, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='scroller'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-yet-scrolled-with-custom-scrollbar-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-yet-scrolled-with-custom-scrollbar-expected.txt
deleted file mode 100644
index e280dd9..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-hidden-yet-scrolled-with-custom-scrollbar-expected.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow DIV id='scroller'",
-      "position": [8, 8],
-      "bounds": [302, 302],
-      "drawsContent": true,
-      "backfaceVisibility": "hidden",
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='scroller'",
-          "rect": [0, 0, 302, 302],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [1, 1, 300, 600],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [1, -399, 300, 600],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [1, 601, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [1, 201, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [1, 689, 88, 12],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [1, 289, 88, 12],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [89, 601, 12, 88],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [89, 201, 12, 88],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [89, 689, 12, 12],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [89, 289, 12, 12],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='scroller'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "subtree"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutScrollbarPart (anonymous)",
-      "reason": "scroll control"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutScrollbarPart (anonymous)",
-      "reason": "scroll control"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-in-overflow-scroll-scrolled-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-in-overflow-scroll-scrolled-expected.txt
deleted file mode 100644
index 5d42637..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/overflow-scroll-in-overflow-scroll-scrolled-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='innerDiv'",
-          "rect": [8, 8, 769, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 8, 300, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 8, 300, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='innerDiv'",
-          "rect": [762, 8, 15, 300],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='innerDiv'",
-      "reason": "subtree"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/padding-keeping-content-size-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/padding-keeping-content-size-expected.txt
deleted file mode 100644
index d9e5da9..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/padding-keeping-content-size-expected.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'",
-          "rect": [0, 200, 140, 140],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target1' class='outer'",
-          "rect": [0, 0, 140, 140],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='inner'",
-          "rect": [20, 220, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='inner'",
-          "rect": [0, 200, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='target1' class='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='inner'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/padding-keeping-visual-size-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/padding-keeping-visual-size-expected.txt
deleted file mode 100644
index bdcd9152..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/padding-keeping-visual-size-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'",
-          "rect": [0, 200, 100, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='inner'",
-          "rect": [0, 200, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target1' class='outer'",
-          "rect": [0, 0, 100, 100],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='target1' class='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='inner'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/reflection-repaint-test-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/reflection-repaint-test-expected.txt
deleted file mode 100644
index 652b63e..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/reflection-repaint-test-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [22, 50, 226, 167],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [23, 51, 71, 109],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "full"
-    },
-    {
-      "object": "InlineTextBox 'PASS'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-absolute-layer-with-reflection-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-absolute-layer-with-reflection-expected.txt
deleted file mode 100644
index 03eb4e6f..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-absolute-layer-with-reflection-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-          "rect": [250, 230, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='absolute clipped'",
-          "rect": [250, 230, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative reflected'",
-          "rect": [250, 230, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='green'",
-          "rect": [250, 230, 100, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='absolute clipped'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='relative reflected'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='green'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt
deleted file mode 100644
index 18a5be6a..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 1893],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='scrollpanel'",
-          "rect": [677, 250, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-          "rect": [677, 250, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-          "rect": [677, 250, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [677, 250, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-          "rect": [677, 50, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-          "rect": [677, 50, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [677, 50, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='scrollpanel'",
-          "rect": [677, 50, 100, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='scrollpanel'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='scrollpanel'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='scrollpanel'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='container'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-no-visible-content-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-no-visible-content-expected.txt
deleted file mode 100644
index 28ae4a6e..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-no-visible-content-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "rect": [100, 1150, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='fixed clipped'",
-          "rect": [100, 1150, 100, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='fixed clipped'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-reflection-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-reflection-expected.txt
deleted file mode 100644
index 20a9c14c..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-reflection-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green reflected'",
-          "rect": [250, 280, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-          "rect": [250, 280, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='fixed clipped'",
-          "rect": [250, 280, 100, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='fixed clipped'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green reflected'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-transformed-parent-layer-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
deleted file mode 100644
index 7f67f9f0..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "rect": [93, 234, 142, 143],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-          "rect": [93, 234, 142, 143],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='fixed clipped'",
-          "rect": [93, 234, 142, 143],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='fixed clipped'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-in-clipped-layer-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-in-clipped-layer-expected.txt
deleted file mode 100644
index 38ad5852..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-in-clipped-layer-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-          "rect": [100, 150, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='absolute clipped'",
-          "rect": [100, 150, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative green'",
-          "rect": [100, 150, 100, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='absolute clipped'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='relative green'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-in-fixed-layer-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-in-fixed-layer-expected.txt
deleted file mode 100644
index 2319fc1..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-in-fixed-layer-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "rect": [100, 1150, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-          "rect": [100, 1150, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='fixed clipped'",
-          "rect": [100, 1150, 100, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='fixed clipped'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-in-transformed-layer-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-in-transformed-layer-expected.txt
deleted file mode 100644
index 0baea79..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-in-transformed-layer-expected.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "rect": [79, 129, 142, 142],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='absolute clipped rotated'",
-          "rect": [79, 129, 142, 142],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-          "rect": [100, 150, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='absolute clipped rotated'",
-          "rect": [100, 150, 100, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='absolute clipped rotated'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='absolute clipped rotated'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-inside-table-cell-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-inside-table-cell-expected.txt
deleted file mode 100644
index 794836c..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-inside-table-cell-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell (relative positioned) TD id='cellToScroll' class='relative'",
-          "rect": [312, 112, 454, 469],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "rect": [314, 114, 435, 450],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative red'",
-          "rect": [314, 114, 435, 450],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTableCell (relative positioned) TD id='cellToScroll' class='relative'",
-          "rect": [314, 564, 435, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell (relative positioned) TD id='cellToScroll' class='relative'",
-      "reason": "subtree"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='relative red'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-relative-table-inside-table-cell-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-relative-table-inside-table-cell-expected.txt
deleted file mode 100644
index 7f7d19f..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-relative-table-inside-table-cell-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [1566, 1781],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableCell (relative positioned) TD id='cellToScroll' class='relative'",
-          "rect": [1112, 1312, 454, 469],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "rect": [1114, 1314, 435, 450],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative red'",
-          "rect": [1114, 1314, 435, 450],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTableCell (relative positioned) TD id='cellToScroll' class='relative'",
-          "rect": [1114, 1764, 435, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableCell (relative positioned) TD id='cellToScroll' class='relative'",
-      "reason": "subtree"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='relative red'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
deleted file mode 100644
index d11313f..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 5054],
-      "contentsOpaque": true,
-      "drawsContent": true
-    },
-    {
-      "name": "LayoutBlockFlow (relative positioned) HEADER",
-      "position": [8, 26],
-      "bounds": [769, 1974],
-      "drawsContent": true,
-      "backfaceVisibility": "hidden",
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='searchbar'",
-          "rect": [10, 1824, 150, 150],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='recentlink'",
-          "rect": [10, 1824, 150, 150],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='searchbar'",
-          "rect": [10, 1424, 150, 150],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='recentlink'",
-          "rect": [10, 1424, 150, 150],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='searchbar'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='recentlink'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-with-transformed-parent-layer-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-with-transformed-parent-layer-expected.txt
deleted file mode 100644
index 0127242..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/scroll-with-transformed-parent-layer-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 2016],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "rect": [79, 129, 142, 142],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-          "rect": [79, 129, 142, 142],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='absolute clipped'",
-          "rect": [79, 129, 142, 142],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='absolute clipped'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
deleted file mode 100644
index fe20478..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [7, 8, 34, 48],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='container'",
-      "reason": "selection"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'xx'",
-      "reason": "geometry"
-    },
-    {
-      "object": "InlineTextBox 'y'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/subpixel-offset-scaled-transform-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/subpixel-offset-scaled-transform-expected.txt
deleted file mode 100644
index a614d2ac..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/subpixel-offset-scaled-transform-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='child'",
-          "rect": [8, 8, 81, 40],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='child'",
-          "rect": [8, 8, 80, 40],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='child scale'",
-          "rect": [8, 58, 41, 40],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='child scale'",
-          "rect": [8, 58, 41, 40],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='child'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='child scale'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip-2-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip-2-expected.txt
deleted file mode 100644
index 879d0b4..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip-2-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [8, 8, 100, 100],
-          "reason": "background"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [8, 8, 100, 100],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "background"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip-3-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip-3-expected.txt
deleted file mode 100644
index 8246087..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip-3-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [15, 60, 100, 100],
-          "reason": "background"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "rect": [15, 60, 100, 100],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "background"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='target'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip-expected.txt
deleted file mode 100644
index 341ea81..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/subtree-root-clip-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "rect": [8, 8, 100, 100],
-          "reason": "background"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner'",
-          "rect": [8, 8, 100, 100],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow (floating) DIV",
-      "reason": "background"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner'",
-      "reason": "disappeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-document-no-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-document-no-scrollbars-expected.txt
deleted file mode 100644
index 9f8f37c..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/absolute-sized-document-no-scrollbars-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [-1, -1, 578, 434],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [0, 0, 576, 432],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer defs",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/add-background-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/add-background-property-on-root-expected.txt
deleted file mode 100644
index 270ebbe..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/add-background-property-on-root-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 8, 100, 100],
-          "reason": "background"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [8, 8, 100, 100],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "background"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "background"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/clip-path-child-changes-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/clip-path-child-changes-expected.txt
deleted file mode 100644
index 2af4a2e..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/clip-path-child-changes-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [0, 0, 200, 200],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/clip-path-units-changes-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/clip-path-units-changes-expected.txt
deleted file mode 100644
index b1e2570..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/clip-path-units-changes-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 200, 200],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceClipper clipPath id='myclip'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/container-repaint-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/container-repaint-expected.txt
deleted file mode 100644
index e75973f..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/container-repaint-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 100, 100, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='mover'",
-          "rect": [0, 100, 100, 50],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 50, 100, 50],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='mover'",
-          "rect": [0, 50, 100, 50],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGViewportContainer svg id='mover'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/deep-dynamic-updates-expected.png b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/deep-dynamic-updates-expected.png
deleted file mode 100644
index e7ee6100..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/deep-dynamic-updates-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/deep-dynamic-updates-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/deep-dynamic-updates-expected.txt
deleted file mode 100644
index 3fcce902..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/deep-dynamic-updates-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [23, 23, 404, 404],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [-1, -1, 403, 403],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [-1, -1, 123, 23],
-          "reason": "SVG resource change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop id='stop1'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt
deleted file mode 100644
index 8c61365..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 800, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutEmbeddedObject OBJECT",
-          "rect": [0, 0, 402, 202],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [211, 11, 180, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [210, 10, 180, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [11, 11, 180, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 10, 180, 180],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutEmbeddedObject OBJECT",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-change-target-id-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-change-target-id-expected.txt
deleted file mode 100644
index faa4fdb6..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-change-target-id-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-multiple-targets-id-change-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-multiple-targets-id-change-expected.txt
deleted file mode 100644
index c52f626..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-multiple-targets-id-change-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [45, 0, 60, 110],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 55, 110],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage1'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage2'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-reference-invalidation-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-reference-invalidation-expected.txt
deleted file mode 100644
index faa4fdb6..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-reference-invalidation-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-remove-target-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-remove-target-expected.txt
deleted file mode 100644
index d4330a2..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-remove-target-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-add-to-document-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-add-to-document-expected.txt
deleted file mode 100644
index b275cfcd..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-add-to-document-expected.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceFilter filter id='filter'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-attribute-change-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-attribute-change-expected.txt
deleted file mode 100644
index cedf322..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-attribute-change-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-2-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-2-expected.txt
deleted file mode 100644
index 634b501..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-2-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='use'",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 0, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer use id='use'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-expected.txt
deleted file mode 100644
index 4cdc2de..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='use'",
-          "rect": [0, 0, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 0, 1, 100],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGContainer use id='use'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-changes-id-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-changes-id-expected.txt
deleted file mode 100644
index faa4fdb6..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-changes-id-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-id-change-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-id-change-expected.txt
deleted file mode 100644
index faa4fdb6..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-id-change-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-inline-style-change-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-inline-style-change-expected.txt
deleted file mode 100644
index 6753cb0b..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-inline-style-change-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 0, 100, 100],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-property-change-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-property-change-expected.txt
deleted file mode 100644
index cedf322..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-property-change-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-reappend-to-document-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-reappend-to-document-expected.txt
deleted file mode 100644
index fa36e9b4..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-reappend-to-document-expected.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage-green'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGResourceFilter filter id='filter'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGResourceFilter filter id='filter'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage-green'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-remove-from-document-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-remove-from-document-expected.txt
deleted file mode 100644
index 6f1f954..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-remove-from-document-expected.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage-red'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGResourceFilter filter id='filter'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-style-change-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-style-change-expected.txt
deleted file mode 100644
index 6753cb0b..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/feImage-target-style-change-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 110, 110],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 0, 100, 100],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/fecomponenttransfer-in1-change-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/fecomponenttransfer-in1-change-expected.txt
deleted file mode 100644
index aa4832d..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/fecomponenttransfer-in1-change-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceFilterPrimitive feComponentTransfer id='fe'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/filter-child-repaint-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/filter-child-repaint-expected.txt
deleted file mode 100644
index 69f28641..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/filter-child-repaint-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 106, 106],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='poke'",
-          "rect": [32, 32, 64, 64],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='poke'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/filter-refresh-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/filter-refresh-expected.txt
deleted file mode 100644
index 7c24f0d..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/filter-refresh-expected.txt
+++ /dev/null
@@ -1,468 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [10, 170, 132, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [10, 130, 132, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='separate2'",
-          "rect": [140, 140, 36, 36],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='filtered'",
-          "rect": [140, 100, 36, 36],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [140, 60, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [90, 170, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [90, 130, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [90, 90, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [90, 90, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [90, 50, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [90, 50, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 170, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 130, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 90, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 90, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 50, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 50, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [10, 90, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [10, 50, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='separate1'",
-          "rect": [140, 60, 30, 30],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [90, 170, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [90, 170, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [90, 130, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [90, 130, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [90, 90, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [90, 90, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [90, 50, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [90, 50, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [50, 170, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [50, 170, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [50, 130, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [50, 130, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [50, 90, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [50, 90, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [50, 50, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [50, 50, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [10, 170, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [10, 170, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [10, 130, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [10, 130, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [10, 90, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [10, 90, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [10, 50, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [10, 50, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 10, 30, 30],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='separate1'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='filtered'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGRect rect id='separate2'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/filter-width-update-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/filter-width-update-expected.txt
deleted file mode 100644
index 62d46a4..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/filter-width-update-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 140, 140],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceFilter filter id='blur'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/gradient-add-stops-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/gradient-add-stops-expected.txt
deleted file mode 100644
index b6d5b7d..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/gradient-add-stops-expected.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 100, 100],
-          "reason": "SVG resource change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceLinearGradient linearGradient id='test'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/gradient-stop-style-change-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/gradient-stop-style-change-expected.txt
deleted file mode 100644
index 717ca40f3..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/gradient-stop-style-change-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 100, 100],
-          "reason": "SVG resource change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGGradientStop stop id='stop'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/image-with-clip-path-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/image-with-clip-path-expected.txt
deleted file mode 100644
index a0fe8056..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/image-with-clip-path-expected.txt
+++ /dev/null
@@ -1,110 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect id='r'",
-          "rect": [0, 0, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGRect rect id='r'",
-          "rect": [0, 0, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='g'",
-          "rect": [20, 20, 60, 60],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='g'",
-          "rect": [20, 20, 60, 60],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGImage image",
-          "rect": [20, 20, 60, 60],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGImage image",
-          "rect": [20, 20, 60, 60],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='g'",
-          "rect": [175, 25, 50, 50],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGImage image",
-          "rect": [175, 25, 50, 50],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGRect rect id='r'",
-          "rect": [175, 25, 50, 50],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='g'",
-          "rect": [0, 0, 10, 10],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGImage image",
-          "rect": [0, 0, 10, 10],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g id='g'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer defs",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGResourceClipper clipPath id='p'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGRect rect id='r'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGImage image",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGContainer g id='g'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer defs",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGResourceClipper clipPath id='p'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGRect rect id='r'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGImage image",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewBox-contract-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewBox-contract-expected.txt
deleted file mode 100644
index 0b1196d..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewBox-contract-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 200, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='inner'",
-          "rect": [0, 0, 200, 200],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGViewportContainer svg id='inner'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewBox-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewBox-expected.txt
deleted file mode 100644
index 0830470..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/inner-svg-change-viewBox-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='s'",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGViewportContainer svg id='s'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/invalidate-on-child-layout-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/invalidate-on-child-layout-expected.txt
deleted file mode 100644
index 11db7d5..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/invalidate-on-child-layout-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [40, 40, 120, 120],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 110, 110],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGEllipse circle id='circle'",
-          "rect": [50, 50, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGEllipse circle id='circle'",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGEllipse circle id='circle'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-marker-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-marker-and-object-creation-expected.txt
deleted file mode 100644
index 2bccb31..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-marker-and-object-creation-expected.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [202, 210, 113, 113],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [202, 210, 113, 113],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [203, 211, 111, 111],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [0, 0, 4, 4],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGResourceMarker marker id='markerMiddle'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-marker-creation-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-marker-creation-expected.txt
deleted file mode 100644
index 5bf172c..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-marker-creation-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [202, 210, 113, 113],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [0, 0, 4, 4],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceMarker marker id='markerMiddle'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-mask-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-mask-and-object-creation-expected.txt
deleted file mode 100644
index 0a8da08..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-mask-and-object-creation-expected.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 800, 300],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [0, 100, 800, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 100, 800, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 100, 800, 100],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g id='content'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGResourceMasker mask id='dynMask'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-mask-creation-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-mask-creation-expected.txt
deleted file mode 100644
index a3b6e16d..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-late-mask-creation-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 800, 300],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 100, 800, 100],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGResourceMasker mask id='dynMask'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-bounce-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-bounce-expected.txt
deleted file mode 100644
index a8d85e55..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-bounce-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGEllipse circle id='bounce'",
-          "rect": [101, 101, 68, 68],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGEllipse circle id='bounce'",
-          "rect": [1, 1, 68, 68],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGEllipse circle id='bounce'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-container-expected.png b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-container-expected.png
deleted file mode 100644
index 77b2fd9..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-container-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-container-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-container-expected.txt
deleted file mode 100644
index 517ea10..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-container-expected.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='group'",
-          "rect": [0, 0, 76, 76],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 76, 76],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [-1, -1, 42, 42],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g id='group'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-gradient-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-gradient-expected.txt
deleted file mode 100644
index e97c49f4..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-gradient-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 100, 430, 80],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 10, 430, 80],
-          "reason": "SVG resource change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceLinearGradient linearGradient id='Gradient'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop id='stop1'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-pattern-child-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-pattern-child-expected.txt
deleted file mode 100644
index 8cbbce6..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-pattern-child-expected.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 100, 430, 80],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 10, 430, 80],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [10, 10, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 10, 10, 10],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-pattern-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-pattern-expected.txt
deleted file mode 100644
index 405f473..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-pattern-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 100, 430, 80],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 10, 430, 80],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [10, 10, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 10, 10, 10],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourcePattern pattern id='Pattern'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-polygon-changes-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-polygon-changes-expected.txt
deleted file mode 100644
index c6e87f28..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-polygon-changes-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath polygon id='polygon'",
-          "rect": [264, 218, 164, 107],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGPath polygon id='polygon'",
-          "rect": [264, 208, 164, 107],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGPath polygon id='polygon'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-polygon-removal-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-polygon-removal-expected.txt
deleted file mode 100644
index c9bdce0..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-polygon-removal-expected.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath polygon id='polygon'",
-          "rect": [264, 258, 165, 67],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGPath polygon id='polygon'",
-          "rect": [264, 218, 164, 107],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGPath polygon id='polygon'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-stop-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-stop-expected.txt
deleted file mode 100644
index e238d011..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-stop-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 100, 430, 80],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 10, 430, 80],
-          "reason": "SVG resource change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGGradientStop stop id='stop1'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-stop-linked-gradient-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-stop-linked-gradient-expected.txt
deleted file mode 100644
index 4f99969..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-stop-linked-gradient-expected.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 210, 430, 80],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 110, 430, 80],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 10, 430, 80],
-          "reason": "SVG resource change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGGradientStop stop id='stop1'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGResourceLinearGradient linearGradient id='gradient'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-transform-addition-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-transform-addition-expected.txt
deleted file mode 100644
index bd5f3d49..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-transform-addition-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath polygon id='polygon'",
-          "rect": [264, 218, 164, 107],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGPath polygon id='polygon'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-transform-changes-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-transform-changes-expected.txt
deleted file mode 100644
index bd5f3d49..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/js-update-transform-changes-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath polygon id='polygon'",
-          "rect": [264, 218, 164, 107],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGPath polygon id='polygon'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/marker-child-changes-css-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/marker-child-changes-css-expected.txt
deleted file mode 100644
index 717a6b2..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/marker-child-changes-css-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [121, 126, 68, 68],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 0, 2, 2],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/marker-child-changes-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/marker-child-changes-expected.txt
deleted file mode 100644
index 717a6b2..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/marker-child-changes-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [121, 126, 68, 68],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 0, 2, 2],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGPath path",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/marker-viewBox-changes-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/marker-viewBox-changes-expected.txt
deleted file mode 100644
index c72fd58e..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/marker-viewBox-changes-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath path id='go'",
-          "rect": [89, 94, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [90, 95, 98, 98],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 10, 10],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourceMarker marker id='markerStart'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGPath path id='go'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/mask-child-changes-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/mask-child-changes-expected.txt
deleted file mode 100644
index c33edd7c..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/mask-child-changes-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 800, 300],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 100, 800, 100],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/mask-invalidation-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/mask-invalidation-expected.txt
deleted file mode 100644
index ea54f1e..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/mask-invalidation-expected.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect id='maskRect'",
-          "rect": [100, 100, 460, 316],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGRect rect id='maskRect'",
-          "rect": [50, 50, 460, 316],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGContainer g id='root'",
-          "rect": [50, 50, 453, 299],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [50, 50, 453, 299],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [100, 100, 403, 249],
-          "reason": "appeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='maskRect'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGContainer g id='root'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
deleted file mode 100644
index 4d6177e..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
+++ /dev/null
@@ -1,144 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 800, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutEmbeddedObject OBJECT",
-          "rect": [0, 0, 402, 202],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [1, 1, 400, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutEmbeddedObject OBJECT",
-          "rect": [1, 1, 400, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 285, 135],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutEmbeddedObject OBJECT",
-          "rect": [0, 0, 285, 135],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 135, 285, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [211, 11, 180, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [11, 11, 180, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 10, 180, 125],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [210, 10, 75, 125],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [285, 0, 15, 135],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [285, 135, 15, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutEmbeddedObject OBJECT",
-      "reason": "style change"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutEmbeddedObject OBJECT",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
deleted file mode 100644
index 4d6177e..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
+++ /dev/null
@@ -1,144 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 800, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutEmbeddedObject OBJECT",
-          "rect": [0, 0, 402, 202],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [1, 1, 400, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutEmbeddedObject OBJECT",
-          "rect": [1, 1, 400, 200],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [0, 0, 285, 135],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutEmbeddedObject OBJECT",
-          "rect": [0, 0, 285, 135],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 135, 285, 15],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [211, 11, 180, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [11, 11, 180, 180],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [10, 10, 180, 125],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [210, 10, 75, 125],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [285, 0, 15, 135],
-          "reason": "scroll control"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [285, 135, 15, 15],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutEmbeddedObject OBJECT",
-      "reason": "style change"
-    },
-    {
-      "object": "HorizontalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutEmbeddedObject OBJECT",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt
deleted file mode 100644
index 74f12af..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 8, 402, 402],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutEmbeddedObject object",
-          "rect": [9, 9, 400, 400],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [9, 9, 400, 400],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [9, 9, 400, 400],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [169, 169, 80, 80],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [89, 189, 40, 40],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow div id='contentBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutEmbeddedObject object",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/paintorder-filtered-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/paintorder-filtered-expected.txt
deleted file mode 100644
index 02fe4f0..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/paintorder-filtered-expected.txt
+++ /dev/null
@@ -1,127 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath polygon",
-          "rect": [136, 36, 582, 565],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGContainer use id='t2'",
-          "rect": [181, 163, 138, 137],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [454, 163, 137, 137],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg",
-          "rect": [318, 163, 137, 137],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGContainer use id='t1'",
-          "rect": [45, 163, 137, 137],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGPath polygon",
-          "rect": [455, 165, 135, 134],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGPath polygon id='t3'",
-          "rect": [319, 165, 135, 134],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGPath polygon",
-          "rect": [46, 165, 135, 134],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGPath polygon",
-          "rect": [183, 165, 134, 134],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='poly'",
-          "rect": [47, 166, 133, 132],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='poly'",
-          "rect": [184, 166, 132, 132],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGEllipse circle id='t4'",
-          "rect": [45, 27, 9, 9],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGEllipse circle id='t4'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGPath polygon",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGContainer use id='t1'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='poly'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGPath polygon",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGContainer use id='t2'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='poly'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGPath polygon",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGPath polygon id='t3'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='poly2'",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGPath polygon",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/pending-resource-after-removal-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/pending-resource-after-removal-expected.txt
deleted file mode 100644
index 32b8319..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/pending-resource-after-removal-expected.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 200, 200],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 200, 200],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 200, 200],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='shape'",
-          "rect": [0, 0, 200, 200],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='shape'",
-          "rect": [0, 0, 200, 200],
-          "reason": "SVG resource change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourcePattern pattern id='pat'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='shape'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGResourcePattern pattern id='pat'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGResourcePattern pattern id='pat'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='shape'",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-document-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-document-scrollbars-expected.txt
deleted file mode 100644
index 6311810..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/relative-sized-document-scrollbars-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [6, 4, 788, 592],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [7, 5, 786, 590],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer defs",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/remove-background-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/remove-background-property-on-root-expected.txt
deleted file mode 100644
index 270ebbe..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/remove-background-property-on-root-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 8, 100, 100],
-          "reason": "background"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [8, 8, 100, 100],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "background"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "background"
-    },
-    {
-      "object": "LayoutSVGRoot svg",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-moving-svg-and-div-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-moving-svg-and-div-expected.txt
deleted file mode 100644
index 4c6f705..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-moving-svg-and-div-expected.txt
+++ /dev/null
@@ -1,519 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [550, 350, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [535, 325, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [535, 325, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [520, 300, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [520, 300, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [505, 275, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [505, 275, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [490, 250, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [490, 250, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [475, 225, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [475, 225, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [460, 200, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [460, 200, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [445, 175, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [445, 175, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [430, 150, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [430, 150, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-          "rect": [400, 100, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [250, 350, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [235, 325, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [235, 325, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [220, 300, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [220, 300, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [205, 275, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [205, 275, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [190, 250, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [190, 250, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [175, 225, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [175, 225, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [160, 200, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [160, 200, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [145, 175, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [145, 175, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [130, 150, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [130, 150, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRoot (positioned) svg id='svg'",
-          "rect": [100, 100, 150, 150],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [575, 375, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [560, 350, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [560, 350, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [545, 325, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [545, 325, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [530, 300, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [530, 300, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [515, 275, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [515, 275, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [500, 250, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [500, 250, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [485, 225, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [485, 225, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [470, 200, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [470, 200, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [455, 175, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [455, 175, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow div class='innerBox'",
-          "rect": [425, 125, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [275, 375, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [260, 350, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [260, 350, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [245, 325, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [245, 325, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [230, 300, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [230, 300, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [215, 275, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [215, 275, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [200, 250, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [200, 250, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [185, 225, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [185, 225, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [170, 200, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [170, 200, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [155, 175, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [155, 175, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [125, 125, 100, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRoot (positioned) svg id='svg'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow div class='innerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot (positioned) svg id='svg'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow div class='innerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot (positioned) svg id='svg'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow div class='innerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot (positioned) svg id='svg'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow div class='innerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot (positioned) svg id='svg'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow div class='innerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot (positioned) svg id='svg'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow div class='innerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot (positioned) svg id='svg'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow div class='innerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot (positioned) svg id='svg'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow div class='innerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRoot (positioned) svg id='svg'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow div class='innerBox'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-paintorder-expected.png b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-paintorder-expected.png
deleted file mode 100644
index f869be7..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-paintorder-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-paintorder-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-paintorder-expected.txt
deleted file mode 100644
index e000876..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/repaint-paintorder-expected.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGPath polygon",
-          "rect": [136, 36, 582, 565],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGPath polygon",
-          "rect": [455, 165, 135, 134],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGPath polygon id='t3'",
-          "rect": [319, 165, 135, 134],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGPath polygon",
-          "rect": [46, 165, 135, 134],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGPath polygon",
-          "rect": [183, 165, 134, 134],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGContainer use id='t1'",
-          "rect": [47, 166, 133, 132],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='poly'",
-          "rect": [47, 166, 133, 132],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGContainer use id='t2'",
-          "rect": [184, 166, 132, 132],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='poly'",
-          "rect": [184, 166, 132, 132],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGEllipse circle id='t4'",
-          "rect": [45, 27, 9, 9],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGEllipse circle id='t4'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGPath polygon",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGContainer use id='t1'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='poly'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGPath polygon",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGContainer use id='t2'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGViewportContainer svg id='poly'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGPath polygon",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGPath polygon id='t3'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGPath polygon",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/resource-client-removal-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/resource-client-removal-expected.txt
deleted file mode 100644
index bcea57c6..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/resource-client-removal-expected.txt
+++ /dev/null
@@ -1,395 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='inneruse'",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGPath path id='hp'",
-          "rect": [0, 0, 100, 100],
-          "reason": "SVG resource change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop id='offset'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop id='offset'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop id='offset'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop id='offset'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGGradientStop stop id='offset'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGContainer g id='inneruse'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGPath path id='hp'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/resource-invalidate-on-target-update-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/resource-invalidate-on-target-update-expected.txt
deleted file mode 100644
index 0ed3851..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/resource-invalidate-on-target-update-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='box'",
-          "rect": [0, 10, 230, 350],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect3'",
-          "rect": [0, 240, 230, 120],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect2'",
-          "rect": [10, 130, 200, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect1'",
-          "rect": [10, 10, 200, 100],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g id='box'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect1'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect2'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect3'",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/shape-with-nested-outline-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/shape-with-nested-outline-expected.txt
deleted file mode 100644
index 98a6f62..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/shape-with-nested-outline-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [8, 8, 500, 500],
-          "reason": "outline"
-        },
-        {
-          "object": "LayoutSVGRect rect id='r'",
-          "rect": [108, 108, 300, 300],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "outline"
-    },
-    {
-      "object": "LayoutSVGRect rect id='r'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/stroke-opacity-update-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/stroke-opacity-update-expected.txt
deleted file mode 100644
index b0a9dd1b..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/stroke-opacity-update-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGEllipse circle",
-          "rect": [-1, -1, 205, 205],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGEllipse circle",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/text-pattern-update-2-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/text-pattern-update-2-expected.txt
deleted file mode 100644
index 2cf3827..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/text-pattern-update-2-expected.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGText text",
-          "rect": [8, 8, 300, 100],
-          "reason": "SVG resource change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourcePattern pattern id='pat'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "InlineTextBox 'X'",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "InlineTextBox 'Y'",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "InlineTextBox 'Z'",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/text-pattern-update-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/text-pattern-update-expected.txt
deleted file mode 100644
index c61ad367..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/text-pattern-update-expected.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGText text",
-          "rect": [8, 8, 100, 100],
-          "reason": "SVG resource change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourcePattern pattern id='pat'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "InlineTextBox 'X'",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/transform-changed-state-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/transform-changed-state-expected.txt
deleted file mode 100644
index e5fdcd3..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/transform-changed-state-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [108, 108, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [108, 108, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [108, 8, 100, 100],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [108, 8, 100, 100],
-          "reason": "full"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutSVGRect rect",
-      "reason": "full"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/transform-foreign-object-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/transform-foreign-object-expected.txt
deleted file mode 100644
index 524e40f..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/transform-foreign-object-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [108, 8, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [108, 8, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "rect": [8, 8, 100, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGForeignObject foreignObject",
-          "rect": [8, 8, 100, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGForeignObject foreignObject",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGForeignObject foreignObject",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/transform-text-element-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/transform-text-element-expected.txt
deleted file mode 100644
index ef7d1ca..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/transform-text-element-expected.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [8, 58, 400, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [8, 58, 400, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [8, 8, 400, 100],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [8, 8, 400, 100],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Test'",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGText text",
-      "reason": "subtree"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "subtree"
-    },
-    {
-      "object": "InlineTextBox 'Test'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-pattern-update-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-pattern-update-expected.txt
deleted file mode 100644
index caa5d50f..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/tspan-pattern-update-expected.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "rect": [8, 8, 300, 100],
-          "reason": "SVG resource change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGResourcePattern pattern id='pat'",
-      "reason": "full"
-    },
-    {
-      "object": "LayoutSVGTSpan tspan",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "InlineFlowBox",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "InlineTextBox 'Y'",
-      "reason": "SVG resource change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/use-detach-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/use-detach-expected.txt
deleted file mode 100644
index 558d176..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/use-detach-expected.txt
+++ /dev/null
@@ -1,348 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='use'",
-          "rect": [210, 58, 44, 64],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='use'",
-          "rect": [210, 58, 44, 64],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer g id='use'",
-          "rect": [210, 58, 44, 64],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [210, 58, 44, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [210, 58, 44, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [210, 58, 44, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [210, 58, 44, 38],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [210, 58, 44, 38],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [210, 58, 44, 38],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [210, 58, 44, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [210, 58, 44, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [210, 58, 44, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [210, 58, 44, 38],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [210, 58, 44, 38],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [210, 58, 44, 38],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text id='use_text'",
-          "rect": [210, 58, 44, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='use_text'",
-          "rect": [210, 58, 44, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='use_text'",
-          "rect": [210, 58, 44, 38],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGText text id='use_text'",
-          "rect": [210, 58, 44, 38],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text id='use_text'",
-          "rect": [210, 58, 44, 38],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGText text id='use_text'",
-          "rect": [210, 58, 44, 38],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGEllipse circle id='use_circle'",
-          "rect": [217, 93, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGEllipse circle id='use_circle'",
-          "rect": [217, 93, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGEllipse circle id='use_circle'",
-          "rect": [217, 93, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGEllipse circle id='use_circle'",
-          "rect": [217, 93, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGEllipse circle id='use_circle'",
-          "rect": [217, 93, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGEllipse circle id='use_circle'",
-          "rect": [217, 93, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [218, 94, 28, 28],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [218, 94, 28, 28],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [218, 94, 28, 28],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [218, 94, 28, 28],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [218, 94, 28, 28],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [218, 94, 28, 28],
-          "reason": "disappeared"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text id='use_text'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGEllipse circle id='use_circle'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='use'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='use'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='use_text'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'use'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGEllipse circle id='use_circle'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text id='use_text'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGEllipse circle id='use_circle'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='use'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='use'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='use_text'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'use'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGEllipse circle id='use_circle'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGText text id='use_text'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGEllipse circle id='use_circle'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGHiddenContainer g id='use'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGContainer g id='use'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGText text id='use_text'",
-      "reason": "appeared"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGInlineText #text",
-      "reason": "appeared"
-    },
-    {
-      "object": "InlineTextBox 'use'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGEllipse circle id='use_circle'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/use-disappears-after-style-update-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/use-disappears-after-style-update-expected.txt
deleted file mode 100644
index 70e6629..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/use-disappears-after-style-update-expected.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [50, 10, 36, 36],
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [50, 10, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [50, 10, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [10, 10, 30, 30],
-          "reason": "appeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [10, 10, 30, 30],
-          "reason": "disappeared"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 10, 30, 30],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "disappeared"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "SVG resource change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "appeared"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/use-inherit-style-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/use-inherit-style-expected.txt
deleted file mode 100644
index 4b166e4b4..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/svg/use-inherit-style-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='g'",
-          "rect": [0, 0, 100, 60],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [0, 0, 100, 60],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='rect'",
-          "rect": [0, 0, 100, 60],
-          "reason": "style change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutSVGContainer g id='g'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGContainer use",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutSVGRect rect id='rect'",
-      "reason": "style change"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/table-overflow-auto-in-overflow-auto-scrolled-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/table-overflow-auto-in-overflow-auto-scrolled-expected.txt
deleted file mode 100644
index 41664e6..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/table-overflow-auto-in-overflow-auto-scrolled-expected.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='innerDiv'",
-          "rect": [8, 8, 769, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTable TABLE",
-          "rect": [8, 8, 306, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 8, 306, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 8, 306, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTableSection TBODY",
-          "rect": [8, 8, 306, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [10, 8, 302, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [10, 8, 302, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='innerDiv'",
-          "rect": [762, 8, 15, 300],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='innerDiv'",
-      "reason": "subtree"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt
deleted file mode 100644
index 41664e6..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='innerDiv'",
-          "rect": [8, 8, 769, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTable TABLE",
-          "rect": [8, 8, 306, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 8, 306, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTableRow TR",
-          "rect": [8, 8, 306, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTableSection TBODY",
-          "rect": [8, 8, 306, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [10, 8, 302, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [10, 8, 302, 300],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='innerDiv'",
-          "rect": [762, 8, 15, 300],
-          "reason": "scroll control"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutBlockFlow DIV id='innerDiv'",
-      "reason": "subtree"
-    },
-    {
-      "object": "VerticalScrollbar",
-      "reason": "scroll control"
-    },
-    {
-      "object": "LayoutTable TABLE",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTableSection TBODY",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTableRow TR",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/table-row-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/table-row-expected.txt
deleted file mode 100644
index 8ce3fe2..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/table-row-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTableRow TR id='target' class='green'",
-          "rect": [8, 10, 106, 100],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "rect": [10, 10, 102, 100],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTableRow TR id='target' class='green'",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutTableCell TD",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/textarea-set-disabled-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/textarea-set-disabled-expected.txt
deleted file mode 100644
index 1fe9d5a..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/textarea-set-disabled-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutTextControl TEXTAREA",
-          "rect": [8, 8, 106, 106],
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "rect": [11, 11, 100, 10],
-          "reason": "subtree"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutTextControl TEXTAREA",
-      "reason": "subtree"
-    },
-    {
-      "object": "LayoutBlockFlow DIV id='inner-editor'",
-      "reason": "subtree"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/window-resize-centered-inline-under-fixed-pos-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/window-resize-centered-inline-under-fixed-pos-expected.txt
deleted file mode 100644
index 0c1a1a15..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/window-resize-centered-inline-under-fixed-pos-expected.txt
+++ /dev/null
@@ -1,227 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [600, 250],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='container'",
-          "rect": [0, 0, 600, 500],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 250, 600, 250],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='parent'",
-          "rect": [0, 0, 6, 500],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='child'",
-          "rect": [0, 250, 6, 30],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='child'",
-          "rect": [0, 125, 6, 30],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='parent'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='child'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [400, 250],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='container'",
-          "rect": [0, 0, 600, 250],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [400, 0, 200, 250],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='parent'",
-          "rect": [0, 0, 6, 250],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='child'",
-          "rect": [0, 125, 6, 30],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='parent'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='child'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [400, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='container'",
-          "rect": [0, 0, 400, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 250, 400, 350],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='parent'",
-          "rect": [0, 0, 6, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='child'",
-          "rect": [0, 300, 6, 30],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='child'",
-          "rect": [0, 125, 6, 30],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='parent'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='child'",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='container'",
-          "rect": [0, 0, 800, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [400, 0, 400, 600],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='parent'",
-          "rect": [0, 0, 6, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='child'",
-          "rect": [0, 300, 6, 30],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow (positioned) DIV class='container'",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow DIV class='parent'",
-      "reason": "geometry"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='child'",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/window-resize-frameset-expected.txt b/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/window-resize-frameset-expected.txt
deleted file mode 100644
index b66fe1e..0000000
--- a/third_party/WebKit/LayoutTests/virtual/disable-spinvalidation/paint/invalidation/window-resize-frameset-expected.txt
+++ /dev/null
@@ -1,305 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [600, 250],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutFrameSet FRAMESET",
-          "rect": [0, 0, 600, 500],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 250, 600, 250],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [153, 0, 294, 500],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [453, 0, 147, 500],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [0, 0, 147, 500],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutFrameSet FRAMESET",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutFrame FRAME",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutFrame FRAME",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutFrame FRAME",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [400, 250],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutFrameSet FRAMESET",
-          "rect": [0, 0, 600, 250],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [153, 0, 294, 250],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [400, 0, 200, 250],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [103, 0, 194, 250],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [453, 0, 147, 250],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [0, 0, 147, 250],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [303, 0, 97, 250],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutFrameSet FRAMESET",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutFrame FRAME",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutFrame FRAME",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutFrame FRAME",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [400, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutFrameSet FRAMESET",
-          "rect": [0, 0, 400, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 250, 400, 350],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [103, 0, 194, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [303, 0, 97, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [0, 0, 97, 600],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutFrameSet FRAMESET",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutFrame FRAME",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutFrame FRAME",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutFrame FRAME",
-      "reason": "geometry"
-    }
-  ]
-}
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutFrameSet FRAMESET",
-          "rect": [0, 0, 800, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [400, 0, 400, 600],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [203, 0, 394, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [603, 0, 197, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [0, 0, 197, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [103, 0, 194, 600],
-          "reason": "geometry"
-        },
-        {
-          "object": "LayoutFrame FRAME",
-          "rect": [303, 0, 97, 600],
-          "reason": "geometry"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutFrameSet FRAMESET",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutFrame FRAME",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutFrame FRAME",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutFrame FRAME",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "geometry"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "geometry"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/rootlayerscrolls/fast/rootscroller/README.txt b/third_party/WebKit/LayoutTests/virtual/rootlayerscrolls/fast/rootscroller/README.txt
new file mode 100644
index 0000000..e07220831
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/rootlayerscrolls/fast/rootscroller/README.txt
@@ -0,0 +1,2 @@
+# This suite runs the tests in fast/rootscroller with the --root-layer-scrolls
+flag. Root layer scrolling is tracked in http://crbug.com/417782.
diff --git a/third_party/WebKit/LayoutTests/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.txt b/third_party/WebKit/LayoutTests/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.txt
deleted file mode 100644
index 0d83874..0000000
--- a/third_party/WebKit/LayoutTests/virtual/spinvalidation/paint/invalidation/iframe-display-block-to-display-none-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 68, 732, 94],
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 70, 728, 90],
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 78, 712, 74],
-          "reason": "layoutObject removal"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "layoutObject removal"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "layoutObject removal"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "layoutObject removal"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.txt b/third_party/WebKit/LayoutTests/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.txt
deleted file mode 100644
index f122360..0000000
--- a/third_party/WebKit/LayoutTests/virtual/spinvalidation/paint/invalidation/iframe-display-none-to-display-block-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 68, 732, 94],
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 70, 728, 90],
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [10, 70, 728, 90],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 78, 712, 74],
-          "reason": "layoutObject insertion"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "layoutObject insertion"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "style change"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "layoutObject insertion"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "layoutObject insertion"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/virtual/spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt b/third_party/WebKit/LayoutTests/virtual/spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt
deleted file mode 100644
index ef4e9d2..0000000
--- a/third_party/WebKit/LayoutTests/virtual/spinvalidation/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-{
-  "layers": [
-    {
-      "name": "LayoutView #document",
-      "bounds": [785, 735],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 735, 785, 98],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-          "rect": [8, 184, 769, 641],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-          "rect": [8, 86, 769, 641],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "rect": [8, 86, 769, 98],
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutIFrame IFRAME id='iframe'",
-          "rect": [8, 86, 732, 94],
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [10, 88, 728, 90],
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "rect": [18, 96, 712, 74],
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [58, 234, 489, 537],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutImage IMG",
-          "rect": [58, 136, 489, 537],
-          "reason": "bounds change"
-        }
-      ]
-    }
-  ],
-  "objectPaintInvalidations": [
-    {
-      "object": "LayoutIFrame IFRAME id='iframe'",
-      "reason": "layoutObject removal"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "layoutObject removal"
-    },
-    {
-      "object": "LayoutBlockFlow (anonymous)",
-      "reason": "layoutObject removal"
-    },
-    {
-      "object": "LayoutView #document",
-      "reason": "incremental"
-    },
-    {
-      "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'",
-      "reason": "bounds change"
-    },
-    {
-      "object": "RootInlineBox",
-      "reason": "bounds change"
-    },
-    {
-      "object": "LayoutImage IMG",
-      "reason": "bounds change"
-    },
-    {
-      "object": "LayoutText #text",
-      "reason": "location change"
-    },
-    {
-      "object": "LayoutBlockFlow BODY",
-      "reason": "layoutObject removal"
-    },
-    {
-      "object": "LayoutBlockFlow HTML",
-      "reason": "layoutObject removal"
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/vr/events_vrdisplayactivate.html b/third_party/WebKit/LayoutTests/vr/events_vrdisplayactivate.html
index 1e6f0de..6a4845e 100644
--- a/third_party/WebKit/LayoutTests/vr/events_vrdisplayactivate.html
+++ b/third_party/WebKit/LayoutTests/vr/events_vrdisplayactivate.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/events_vrdisplayconnect.html b/third_party/WebKit/LayoutTests/vr/events_vrdisplayconnect.html
index f1341b7..1f46450 100644
--- a/third_party/WebKit/LayoutTests/vr/events_vrdisplayconnect.html
+++ b/third_party/WebKit/LayoutTests/vr/events_vrdisplayconnect.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/events_vrdisplaypresentchange.html b/third_party/WebKit/LayoutTests/vr/events_vrdisplaypresentchange.html
index 73d7ae9..6a28f68c 100644
--- a/third_party/WebKit/LayoutTests/vr/events_vrdisplaypresentchange.html
+++ b/third_party/WebKit/LayoutTests/vr/events_vrdisplaypresentchange.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/exitPresent_reject_notpresenting.html b/third_party/WebKit/LayoutTests/vr/exitPresent_reject_notpresenting.html
index 810d1b2..50f10d34 100644
--- a/third_party/WebKit/LayoutTests/vr/exitPresent_reject_notpresenting.html
+++ b/third_party/WebKit/LayoutTests/vr/exitPresent_reject_notpresenting.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/exitPresent_resolve.html b/third_party/WebKit/LayoutTests/vr/exitPresent_resolve.html
index e0410699..994e7b6b 100644
--- a/third_party/WebKit/LayoutTests/vr/exitPresent_resolve.html
+++ b/third_party/WebKit/LayoutTests/vr/exitPresent_resolve.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/getEyeParameters_match.html b/third_party/WebKit/LayoutTests/vr/getEyeParameters_match.html
index 90d9e5c..f8d5f45 100644
--- a/third_party/WebKit/LayoutTests/vr/getEyeParameters_match.html
+++ b/third_party/WebKit/LayoutTests/vr/getEyeParameters_match.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script src="resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
diff --git a/third_party/WebKit/LayoutTests/vr/getFrameData_noupdate.html b/third_party/WebKit/LayoutTests/vr/getFrameData_noupdate.html
index edfc5ef..a837910 100644
--- a/third_party/WebKit/LayoutTests/vr/getFrameData_noupdate.html
+++ b/third_party/WebKit/LayoutTests/vr/getFrameData_noupdate.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script src="resources/test-constants.js"></script>
 <script>
diff --git a/third_party/WebKit/LayoutTests/vr/getFrameData_oneframeupdate.html b/third_party/WebKit/LayoutTests/vr/getFrameData_oneframeupdate.html
index d1ea97b9..fecf571a 100644
--- a/third_party/WebKit/LayoutTests/vr/getFrameData_oneframeupdate.html
+++ b/third_party/WebKit/LayoutTests/vr/getFrameData_oneframeupdate.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script src="resources/test-constants.js"></script>
 <script>
diff --git a/third_party/WebKit/LayoutTests/vr/getFrameData_samewithinframe.html b/third_party/WebKit/LayoutTests/vr/getFrameData_samewithinframe.html
index b3f10feb..0a376e3 100644
--- a/third_party/WebKit/LayoutTests/vr/getFrameData_samewithinframe.html
+++ b/third_party/WebKit/LayoutTests/vr/getFrameData_samewithinframe.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script src="resources/test-constants.js"></script>
 <script>
diff --git a/third_party/WebKit/LayoutTests/vr/getLayers_notpresenting.html b/third_party/WebKit/LayoutTests/vr/getLayers_notpresenting.html
index 0e576be..2d28a76 100644
--- a/third_party/WebKit/LayoutTests/vr/getLayers_notpresenting.html
+++ b/third_party/WebKit/LayoutTests/vr/getLayers_notpresenting.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/getLayers_presenting.html b/third_party/WebKit/LayoutTests/vr/getLayers_presenting.html
index 6450cc1..cbf73f9 100644
--- a/third_party/WebKit/LayoutTests/vr/getLayers_presenting.html
+++ b/third_party/WebKit/LayoutTests/vr/getLayers_presenting.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script src="resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
diff --git a/third_party/WebKit/LayoutTests/vr/getLayers_presenting_nondefaultbounds.html b/third_party/WebKit/LayoutTests/vr/getLayers_presenting_nondefaultbounds.html
index ef251b7..85b1747e 100644
--- a/third_party/WebKit/LayoutTests/vr/getLayers_presenting_nondefaultbounds.html
+++ b/third_party/WebKit/LayoutTests/vr/getLayers_presenting_nondefaultbounds.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script src="resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
diff --git a/third_party/WebKit/LayoutTests/vr/getLayers_update.html b/third_party/WebKit/LayoutTests/vr/getLayers_update.html
index fd30209a..3bc21d2 100644
--- a/third_party/WebKit/LayoutTests/vr/getLayers_update.html
+++ b/third_party/WebKit/LayoutTests/vr/getLayers_update.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script src="resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
diff --git a/third_party/WebKit/LayoutTests/vr/getVRDisplays_one_display.html b/third_party/WebKit/LayoutTests/vr/getVRDisplays_one_display.html
index 4a72b90..93b33ba1 100644
--- a/third_party/WebKit/LayoutTests/vr/getVRDisplays_one_display.html
+++ b/third_party/WebKit/LayoutTests/vr/getVRDisplays_one_display.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script src="resources/test-constants.js"></script>
 <script>
diff --git a/third_party/WebKit/LayoutTests/vr/getVRDisplays_two_display.html b/third_party/WebKit/LayoutTests/vr/getVRDisplays_two_display.html
index 087b8d7..b0d88f4 100644
--- a/third_party/WebKit/LayoutTests/vr/getVRDisplays_two_display.html
+++ b/third_party/WebKit/LayoutTests/vr/getVRDisplays_two_display.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script src="resources/test-constants.js"></script>
 <script>
diff --git a/third_party/WebKit/LayoutTests/vr/getVRDisplays_zero_display.html b/third_party/WebKit/LayoutTests/vr/getVRDisplays_zero_display.html
index 9b95cff2..54fabb72 100644
--- a/third_party/WebKit/LayoutTests/vr/getVRDisplays_zero_display.html
+++ b/third_party/WebKit/LayoutTests/vr/getVRDisplays_zero_display.html
@@ -1,7 +1,8 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script>
 
diff --git a/third_party/WebKit/LayoutTests/vr/multiple_requestAnimationFrame_called.html b/third_party/WebKit/LayoutTests/vr/multiple_requestAnimationFrame_called.html
index 1aa923b..de3e4dd 100644
--- a/third_party/WebKit/LayoutTests/vr/multiple_requestAnimationFrame_called.html
+++ b/third_party/WebKit/LayoutTests/vr/multiple_requestAnimationFrame_called.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
diff --git a/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_called.html b/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_called.html
index 29a8381..3e123ef1 100644
--- a/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_called.html
+++ b/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_called.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
diff --git a/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_consistentTimestamps.html b/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_consistentTimestamps.html
index 71dc384..d819c8b8 100644
--- a/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_consistentTimestamps.html
+++ b/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_consistentTimestamps.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_handoff.html b/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_handoff.html
index c173930..06812c5e 100644
--- a/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_handoff.html
+++ b/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_handoff.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_invalidhandle.html b/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_invalidhandle.html
index 5ce86969..eeb9a4a 100644
--- a/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_invalidhandle.html
+++ b/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_invalidhandle.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
diff --git a/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_submitFrame_combinations.html b/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_submitFrame_combinations.html
index df37846..804f645c 100644
--- a/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_submitFrame_combinations.html
+++ b/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_submitFrame_combinations.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_unregister.html b/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_unregister.html
index 142d583..b72c302 100644
--- a/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_unregister.html
+++ b/third_party/WebKit/LayoutTests/vr/requestAnimationFrame_unregister.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script>
 let fakeDisplays = fakeVRDisplays();
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_badleftbounds.html b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_badleftbounds.html
index a2c9b69..91ef348 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_badleftbounds.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_badleftbounds.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_badrightbounds.html b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_badrightbounds.html
index 8fa5169f..17ee377 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_badrightbounds.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_badrightbounds.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nogesture.html b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nogesture.html
index eabc0f7..f9eae589 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nogesture.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nogesture.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nolayers.html b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nolayers.html
index 4cf110e..8da11fe 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nolayers.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nolayers.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nosource.html b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nosource.html
index 39b28bc..8232cb6b 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nosource.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nosource.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_notsupported.html b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_notsupported.html
index a4fed932..bcec9fd 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_notsupported.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_notsupported.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nowebgl.html b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nowebgl.html
index f256959..779a90b 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nowebgl.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nowebgl.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <canvas id="canvas-2d"></canvas>
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nullsource.html b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nullsource.html
index dc9568e..10b7f2c 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nullsource.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_nullsource.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_toomanylayers.html b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_toomanylayers.html
index a15642eb..41c80d4 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_reject_toomanylayers.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_reject_toomanylayers.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_resolve.html b/third_party/WebKit/LayoutTests/vr/requestPresent_resolve.html
index 5f23410b..1053973 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_resolve.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_resolve.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_repeatwithgesture.html b/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_repeatwithgesture.html
index b4951dad..620e1abc 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_repeatwithgesture.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_repeatwithgesture.html
@@ -2,8 +2,9 @@
 <!-- Specific regression test for crbug.com/654909 -->
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_repeatwithoutgesture.html b/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_repeatwithoutgesture.html
index 7e381b3a..7967cda9 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_repeatwithoutgesture.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_repeatwithoutgesture.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_then_reject.html b/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_then_reject.html
index 043a71b5..a5f5532 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_then_reject.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_then_reject.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_webgl2.html b/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_webgl2.html
index 48db70b5..0c7375b 100644
--- a/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_webgl2.html
+++ b/third_party/WebKit/LayoutTests/vr/requestPresent_resolve_webgl2.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <canvas id="webgl2-canvas"></canvas>
 <script src="resources/presentation-setup.js"></script>
diff --git a/third_party/WebKit/LayoutTests/vr/resources/mock-vr-service.js b/third_party/WebKit/LayoutTests/vr/resources/mock-vr-service.js
index 040f98d4..f514009 100644
--- a/third_party/WebKit/LayoutTests/vr/resources/mock-vr-service.js
+++ b/third_party/WebKit/LayoutTests/vr/resources/mock-vr-service.js
@@ -1,181 +1,169 @@
 'use strict';
 
-let mockVRService = loadMojoModules(
-    'mockVRService',
-    ['mojo/public/js/bindings',
-     'device/vr/vr_service.mojom',
-    ]).then(mojo => {
-  let [bindings, vr_service] = mojo.modules;
+class MockVRDisplay {
+  constructor(displayInfo, service) {
+    this.bindingSet_ = new mojo.BindingSet(device.mojom.VRDisplay);
+    this.displayClient_ = new device.mojom.VRDisplayClientPtr();
+    this.displayInfo_ = displayInfo;
+    this.service_ = service;
+    this.presentation_provider_ = new MockVRPresentationProvider();
 
-  class MockVRDisplay {
-    constructor(interfaceProvider, displayInfo, service) {
-      this.bindingSet_ = new bindings.BindingSet(vr_service.VRDisplay);
-      this.displayClient_ = new vr_service.VRDisplayClientPtr();
-      this.displayInfo_ = displayInfo;
-      this.service_ = service;
-      this.presentation_provider_ = new MockVRPresentationProvider();
-
-      interfaceProvider.addInterfaceOverrideForTesting(
-          vr_service.VRDisplay.name,
-          handle => this.bindingSet_.addBinding(this, handle));
-
-      if (service.client_) {
-        this.notifyClientOfDisplay();
-      }
-    }
-
-    requestPresent(secureOrigin, submitFrameClient, request) {
-      this.presentation_provider_.bind(submitFrameClient, request);
-      return Promise.resolve({success: true});
-    }
-
-    setPose(pose) {
-      if (pose == null) {
-        this.presentation_provider_.pose_ = null;
-      } else {
-        this.presentation_provider_.initPose();
-        this.presentation_provider_.fillPose(pose);
-      }
-    }
-
-    getNextMagicWindowPose() {
-      return Promise.resolve({
-        pose: this.presentation_provider_.pose_,
-      });
-    }
-
-    forceActivate(reason) {
-      this.displayClient_.onActivate(reason);
-    }
-
-    notifyClientOfDisplay() {
-      let displayPtr = new vr_service.VRDisplayPtr();
-      let request = bindings.makeRequest(displayPtr);
-      let binding = new bindings.Binding(
-          vr_service.VRDisplay,
-          this, request);
-      let clientRequest = bindings.makeRequest(this.displayClient_);
-      this.service_.client_.onDisplayConnected(displayPtr, clientRequest,
-          this.displayInfo_);
+    if (service.client_) {
+      this.notifyClientOfDisplay();
     }
   }
 
-  class MockVRPresentationProvider {
-    constructor() {
-      this.binding_ = new bindings.Binding(vr_service.VRPresentationProvider,
-          this);
-      this.pose_ = null;
-    }
-    bind(client, request) {
-      this.submitFrameClient_ = client;
-      this.binding_.close();
-      this.binding_.bind(request);
-    }
-    submitFrame(frameId, mailboxHolder) {
-      // Trigger the submit completion callbacks here. WARNING: The
-      // Javascript-based mojo mocks are *not* re-entrant.  In the current
-      // default implementation, Javascript calls display.submitFrame, and the
-      // corresponding C++ code uses a reentrant mojo call that waits for
-      // onSubmitFrameTransferred to indicate completion. This never finishes
-      // when using the mocks since the incoming calls are queued until the
-      // current execution context finishes. As a workaround, use the alternate
-      // "WebVRExperimentalRendering" mode which works without reentrant calls,
-      // the code only checks for completion on the *next* frame, see the
-      // corresponding option setting in RuntimeEnabledFeatures.json5.
-      this.submitFrameClient_.onSubmitFrameTransferred();
-      this.submitFrameClient_.onSubmitFrameRendered();
-    }
-    getVSync() {
-      if (this.pose_) {
-        this.pose_.poseIndex++;
-      }
+  requestPresent(secureOrigin, submitFrameClient, request) {
+    this.presentation_provider_.bind(submitFrameClient, request);
+    return Promise.resolve({success: true});
+  }
 
-      // Convert current document time to monotonic time.
-      var now = window.performance.now() / 1000.0;
-      var diff =
-          now - window.internals.monotonicTimeToZeroBasedDocumentTime(now);
-      now += diff;
-      now *= 1000000;
-
-      let retval = Promise.resolve({
-        pose: this.pose_,
-        time: {
-          microseconds: now,
-        },
-        frame_id: 0,
-        status: vr_service.VRPresentationProvider.VSyncStatus.SUCCESS,
-      });
-
-      return retval;
-    }
-    initPose() {
-      this.pose_ = {
-        orientation: null,
-        position: null,
-        angularVelocity: null,
-        linearVelocity: null,
-        angularAcceleration: null,
-        linearAcceleration: null,
-        poseIndex: 0
-      };
-    }
-    fillPose(pose) {
-      for (var field in pose) {
-        if (this.pose_.hasOwnProperty(field)) {
-          this.pose_[field] = pose[field];
-        }
-      }
+  setPose(pose) {
+    if (pose == null) {
+      this.presentation_provider_.pose_ = null;
+    } else {
+      this.presentation_provider_.initPose();
+      this.presentation_provider_.fillPose(pose);
     }
   }
 
-  class MockVRService {
-    constructor(interfaceProvider) {
-      this.bindingSet_ = new bindings.BindingSet(vr_service.VRService);
-      this.mockVRDisplays_ = [];
+  getNextMagicWindowPose() {
+    return Promise.resolve({
+      pose: this.presentation_provider_.pose_,
+    });
+  }
 
-      interfaceProvider.addInterfaceOverrideForTesting(
-          vr_service.VRService.name,
-          handle => this.bindingSet_.addBinding(this, handle));
+  forceActivate(reason) {
+    this.displayClient_.onActivate(reason);
+  }
+
+  notifyClientOfDisplay() {
+    let displayPtr = new device.mojom.VRDisplayPtr();
+    let request = mojo.makeRequest(displayPtr);
+    let binding = new mojo.Binding(device.mojom.VRDisplay, this, request);
+    let clientRequest = mojo.makeRequest(this.displayClient_);
+    this.service_.client_.onDisplayConnected(displayPtr, clientRequest,
+        this.displayInfo_);
+  }
+}
+
+class MockVRPresentationProvider {
+  constructor() {
+    this.binding_ = new mojo.Binding(device.mojom.VRPresentationProvider, this);
+    this.pose_ = null;
+  }
+
+  bind(client, request) {
+    this.submitFrameClient_ = client;
+    this.binding_.close();
+    this.binding_.bind(request);
+  }
+
+  submitFrame(frameId, mailboxHolder) {
+    // Trigger the submit completion callbacks here. WARNING: The
+    // Javascript-based mojo mocks are *not* re-entrant.  In the current
+    // default implementation, Javascript calls display.submitFrame, and the
+    // corresponding C++ code uses a reentrant mojo call that waits for
+    // onSubmitFrameTransferred to indicate completion. This never finishes
+    // when using the mocks since the incoming calls are queued until the
+    // current execution context finishes. As a workaround, use the alternate
+    // "WebVRExperimentalRendering" mode which works without reentrant calls,
+    // the code only checks for completion on the *next* frame, see the
+    // corresponding option setting in RuntimeEnabledFeatures.json5.
+    this.submitFrameClient_.onSubmitFrameTransferred();
+    this.submitFrameClient_.onSubmitFrameRendered();
+  }
+
+  getVSync() {
+    if (this.pose_) {
+      this.pose_.poseIndex++;
     }
 
-    setVRDisplays(displays) {
-      this.mockVRDisplays_ = [];
-      for (let i = 0; i < displays.length; i++) {
-        displays[i].index = i;
-        this.mockVRDisplays_.push(new MockVRDisplay(mojo.frameInterfaces,
-              displays[i], this));
+    // Convert current document time to monotonic time.
+    var now = window.performance.now() / 1000.0;
+    var diff =
+        now - window.internals.monotonicTimeToZeroBasedDocumentTime(now);
+    now += diff;
+    now *= 1000000;
+
+    let retval = Promise.resolve({
+      pose: this.pose_,
+      time: {
+        microseconds: now,
+      },
+      frameId: 0,
+      status: device.mojom.VRPresentationProvider.VSyncStatus.SUCCESS,
+    });
+
+    return retval;
+  }
+
+  initPose() {
+    this.pose_ = {
+      orientation: null,
+      position: null,
+      angularVelocity: null,
+      linearVelocity: null,
+      angularAcceleration: null,
+      linearAcceleration: null,
+      poseIndex: 0
+    };
+  }
+
+  fillPose(pose) {
+    for (var field in pose) {
+      if (this.pose_.hasOwnProperty(field)) {
+        this.pose_[field] = pose[field];
       }
     }
+  }
+}
 
-    addVRDisplay(display) {
-      if (this.mockVRDisplays_.length) {
-        display.index =
-            this.mockVRDisplays_[this.mockVRDisplays_.length - 1] + 1;
-      } else {
-        display.index = 0;
-      }
-      this.mockVRDisplays_.push(new MockVRDisplay(mojo.frameInterfaces,
-            display, this));
-    }
+class MockVRService {
+  constructor() {
+    this.bindingSet_ = new mojo.BindingSet(device.mojom.VRService);
+    this.mockVRDisplays_ = [];
 
-    setClient(client) {
-      this.client_ = client;
-      for (let i = 0; i < this.mockVRDisplays_.length; i++) {
-        this.mockVRDisplays_[i].notifyClientOfDisplay();
-      }
+    this.interceptor_ =
+        new MojoInterfaceInterceptor(device.mojom.VRService.name);
+    this.interceptor_.oninterfacerequest =
+        e => this.bindingSet_.addBinding(this, e.handle);
+    this.interceptor_.start();
+  }
 
-      let device_number = this.mockVRDisplays_.length;
-      return Promise.resolve({number_of_connected_devices: device_number});
+  setVRDisplays(displays) {
+    this.mockVRDisplays_ = [];
+    for (let i = 0; i < displays.length; i++) {
+      displays[i].index = i;
+      this.mockVRDisplays_.push(new MockVRDisplay(displays[i], this));
     }
   }
 
-  return new MockVRService(mojo.frameInterfaces);
-});
+  addVRDisplay(display) {
+    if (this.mockVRDisplays_.length) {
+      display.index =
+          this.mockVRDisplays_[this.mockVRDisplays_.length - 1] + 1;
+    } else {
+      display.index = 0;
+    }
+    this.mockVRDisplays_.push(new MockVRDisplay(display, this));
+  }
+
+  setClient(client) {
+    this.client_ = client;
+    for (let i = 0; i < this.mockVRDisplays_.length; i++) {
+      this.mockVRDisplays_[i].notifyClientOfDisplay();
+    }
+
+    let device_number = this.mockVRDisplays_.length;
+    return Promise.resolve({numberOfConnectedDevices: device_number});
+  }
+}
+
+let mockVRService = new MockVRService(mojo.frameInterfaces);
 
 function vr_test(func, vrDisplays, name, properties) {
-  mockVRService.then( (service) => {
-    service.setVRDisplays(vrDisplays);
-    let t = async_test(name, properties);
-    func(t, service);
-  });
+  mockVRService.setVRDisplays(vrDisplays);
+  let t = async_test(name, properties);
+  func(t, mockVRService);
 }
diff --git a/third_party/WebKit/LayoutTests/vr/stageParameters_match.html b/third_party/WebKit/LayoutTests/vr/stageParameters_match.html
index 27bc513..8120208 100644
--- a/third_party/WebKit/LayoutTests/vr/stageParameters_match.html
+++ b/third_party/WebKit/LayoutTests/vr/stageParameters_match.html
@@ -1,8 +1,9 @@
 <!DOCTYPE html>
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
-<script src="../resources/mojo-helpers.js"></script>
 <script src="resources/fake-vr-displays.js"></script>
+<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
+<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
 <script src="resources/mock-vr-service.js"></script>
 <script src="resources/test-constants.js"></script>
 <canvas id="webgl-canvas"></canvas>
diff --git a/third_party/WebKit/Source/bindings/bindings.gni b/third_party/WebKit/Source/bindings/bindings.gni
index feb91f7..a2959a0b 100644
--- a/third_party/WebKit/Source/bindings/bindings.gni
+++ b/third_party/WebKit/Source/bindings/bindings.gni
@@ -172,6 +172,8 @@
                     "core/v8/serialization/SerializedScriptValueFactory.cpp",
                     "core/v8/serialization/SerializedScriptValueFactory.h",
                     "core/v8/serialization/Transferables.h",
+                    "core/v8/serialization/UnpackedSerializedScriptValue.cpp",
+                    "core/v8/serialization/UnpackedSerializedScriptValue.h",
                     "core/v8/serialization/V8ScriptValueDeserializer.cpp",
                     "core/v8/serialization/V8ScriptValueDeserializer.h",
                     "core/v8/serialization/V8ScriptValueSerializer.cpp",
@@ -185,30 +187,32 @@
 bindings_core_v8_output_dir = "$bindings_output_dir/core/v8"
 
 bindings_unittest_files =
-    get_path_info([
-                    "core/v8/ActivityLoggerTest.cpp",
-                    "core/v8/BindingSecurityTest.cpp",
-                    "core/v8/DocumentWriteEvaluatorTest.cpp",
-                    "core/v8/DOMWrapperWorldTest.cpp",
-                    "core/v8/IDLTypesTest.cpp",
-                    "core/v8/NativeValueTraitsImplTest.cpp",
-                    "core/v8/NativeValueTraitsTest.cpp",
-                    "core/v8/ScriptModuleTest.cpp",
-                    "core/v8/ScriptPromisePropertyTest.cpp",
-                    "core/v8/ScriptPromiseResolverTest.cpp",
-                    "core/v8/ScriptPromiseTest.cpp",
-                    "core/v8/WindowProxyTest.cpp",
-                    "core/v8/ScriptStreamerTest.cpp",
-                    "core/v8/ScriptWrappableVisitorTest.cpp",
-                    "core/v8/ToV8Test.cpp",
-                    "core/v8/TraceWrapperMemberTest.cpp",
-                    "core/v8/V8BindingForTesting.cpp",
-                    "core/v8/V8BindingForTesting.h",
-                    "core/v8/V8BindingTest.cpp",
-                    "core/v8/V8ObjectBuilderTest.cpp",
-                    "core/v8/V8ScriptRunnerTest.cpp",
-                    "core/v8/serialization/SerializedScriptValueTest.cpp",
-                    "core/v8/serialization/V8ScriptValueSerializerTest.cpp",
-                  ],
-                  "abspath")
+    get_path_info(
+        [
+          "core/v8/ActivityLoggerTest.cpp",
+          "core/v8/BindingSecurityTest.cpp",
+          "core/v8/DocumentWriteEvaluatorTest.cpp",
+          "core/v8/DOMWrapperWorldTest.cpp",
+          "core/v8/IDLTypesTest.cpp",
+          "core/v8/NativeValueTraitsImplTest.cpp",
+          "core/v8/NativeValueTraitsTest.cpp",
+          "core/v8/ScriptModuleTest.cpp",
+          "core/v8/ScriptPromisePropertyTest.cpp",
+          "core/v8/ScriptPromiseResolverTest.cpp",
+          "core/v8/ScriptPromiseTest.cpp",
+          "core/v8/WindowProxyTest.cpp",
+          "core/v8/ScriptStreamerTest.cpp",
+          "core/v8/ScriptWrappableVisitorTest.cpp",
+          "core/v8/ToV8Test.cpp",
+          "core/v8/TraceWrapperMemberTest.cpp",
+          "core/v8/V8BindingForTesting.cpp",
+          "core/v8/V8BindingForTesting.h",
+          "core/v8/V8BindingTest.cpp",
+          "core/v8/V8ObjectBuilderTest.cpp",
+          "core/v8/V8ScriptRunnerTest.cpp",
+          "core/v8/serialization/SerializedScriptValueTest.cpp",
+          "core/v8/serialization/SerializedScriptValueThreadedTest.cpp",
+          "core/v8/serialization/V8ScriptValueSerializerTest.cpp",
+        ],
+        "abspath")
 bindings_unittest_files += bindings_modules_v8_unittest_files
diff --git a/third_party/WebKit/Source/bindings/core/v8/custom/V8MessageEventCustom.cpp b/third_party/WebKit/Source/bindings/core/v8/custom/V8MessageEventCustom.cpp
index 1a228b4..7c7175fe 100644
--- a/third_party/WebKit/Source/bindings/core/v8/custom/V8MessageEventCustom.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/custom/V8MessageEventCustom.cpp
@@ -66,12 +66,12 @@
       break;
 
     case MessageEvent::kDataTypeSerializedScriptValue:
-      if (SerializedScriptValue* serialized_value =
-              event->DataAsSerializedScriptValue()) {
+      if (UnpackedSerializedScriptValue* unpacked_value =
+              event->DataAsUnpackedSerializedScriptValue()) {
         MessagePortArray ports = event->ports();
         SerializedScriptValue::DeserializeOptions options;
         options.message_ports = &ports;
-        result = serialized_value->Deserialize(isolate, options);
+        result = unpacked_value->Deserialize(isolate, options);
       } else {
         result = v8::Null(isolate);
       }
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValue.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValue.cpp
index da1c530..20bbe03b 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValue.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValue.cpp
@@ -43,6 +43,7 @@
 #include "bindings/core/v8/serialization/SerializationTag.h"
 #include "bindings/core/v8/serialization/SerializedScriptValueFactory.h"
 #include "bindings/core/v8/serialization/Transferables.h"
+#include "bindings/core/v8/serialization/UnpackedSerializedScriptValue.h"
 #include "core/dom/DOMArrayBuffer.h"
 #include "core/dom/DOMSharedArrayBuffer.h"
 #include "core/dom/ExceptionCode.h"
@@ -353,6 +354,23 @@
                                                               options);
 }
 
+// static
+UnpackedSerializedScriptValue* SerializedScriptValue::Unpack(
+    RefPtr<SerializedScriptValue> value) {
+  if (!value)
+    return nullptr;
+#if DCHECK_IS_ON()
+  DCHECK(!value->was_unpacked_);
+  value->was_unpacked_ = true;
+#endif
+  return new UnpackedSerializedScriptValue(std::move(value));
+}
+
+bool SerializedScriptValue::HasPackedContents() const {
+  return !array_buffer_contents_array_.IsEmpty() ||
+         !image_bitmap_contents_array_.IsEmpty();
+}
+
 bool SerializedScriptValue::ExtractTransferables(
     v8::Isolate* isolate,
     v8::Local<v8::Value> value,
@@ -551,30 +569,4 @@
   }
 }
 
-void SerializedScriptValue::ReceiveTransfer() {
-  if (received_)
-    return;
-  received_.emplace();
-
-  received_->array_buffers.Grow(array_buffer_contents_array_.size());
-  std::transform(array_buffer_contents_array_.begin(),
-                 array_buffer_contents_array_.end(),
-                 received_->array_buffers.begin(),
-                 [](WTF::ArrayBufferContents& contents) -> DOMArrayBufferBase* {
-                   if (contents.IsShared())
-                     return DOMSharedArrayBuffer::Create(contents);
-                   return DOMArrayBuffer::Create(contents);
-                 });
-  array_buffer_contents_array_.clear();
-
-  received_->image_bitmaps.Grow(image_bitmap_contents_array_.size());
-  std::transform(image_bitmap_contents_array_.begin(),
-                 image_bitmap_contents_array_.end(),
-                 received_->image_bitmaps.begin(),
-                 [](RefPtr<StaticBitmapImage>& contents) {
-                   return ImageBitmap::Create(std::move(contents));
-                 });
-  image_bitmap_contents_array_.clear();
-}
-
 }  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValue.h b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValue.h
index 1288990..7d328276 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValue.h
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValue.h
@@ -52,6 +52,7 @@
 class Transferables;
 class ExceptionState;
 class StaticBitmapImage;
+class UnpackedSerializedScriptValue;
 class WebBlobInfo;
 
 typedef HashMap<String, RefPtr<BlobDataHandle>> BlobDataHandleMap;
@@ -159,6 +160,18 @@
   }
   v8::Local<v8::Value> Deserialize(v8::Isolate*, const DeserializeOptions&);
 
+  // Takes ownership of a reference and creates an "unpacked" version of this
+  // value, where the transferred contents have been turned into complete
+  // objects local to this thread. A SerializedScriptValue can only be unpacked
+  // once, and the result is bound to a thread.
+  // See UnpackedSerializedScriptValue.h for more details.
+  static UnpackedSerializedScriptValue* Unpack(RefPtr<SerializedScriptValue>);
+
+  // Used for debugging. Returns true if there are "packed" transferred contents
+  // which would require this value to be unpacked before deserialization.
+  // See UnpackedSerializedScriptValue.h for more details.
+  bool HasPackedContents() const;
+
   // Helper function which pulls the values out of a JS sequence and into a
   // MessagePortArray.  Also validates the elements per sections 4.1.13 and
   // 4.1.15 of the WebIDL spec and section 8.3.3 of the HTML5 spec and generates
@@ -204,22 +217,13 @@
   const uint8_t* Data() const { return data_buffer_.get(); }
   size_t DataLengthInBytes() const { return data_buffer_size_; }
 
-  // These are only accessible once we have "received" the transferred data on
-  // the new thread or context.
-  void ReceiveTransfer();
-  const HeapVector<Member<DOMArrayBufferBase>>& ReceivedArrayBuffers() const {
-    return received_->array_buffers;
-  }
-  const HeapVector<Member<ImageBitmap>>& ReceivedImageBitmaps() const {
-    return received_->image_bitmaps;
-  }
-
   TransferredWasmModulesArray& WasmModules() { return wasm_modules_; }
   BlobDataHandleMap& BlobDataHandles() { return blob_data_handles_; }
 
  private:
   friend class ScriptValueSerializer;
   friend class V8ScriptValueSerializer;
+  friend class UnpackedSerializedScriptValue;
 
   struct BufferDeleter {
     void operator()(uint8_t* buffer) { WTF::Partitions::BufferFree(buffer); }
@@ -248,7 +252,7 @@
   size_t data_buffer_size_ = 0;
 
   // These two have one-use transferred contents, and are stored in
-  // ReceivedObjects thereafter.
+  // UnpackedSerializedScriptValue thereafter.
   ArrayBufferContentsArray array_buffer_contents_array_;
   ImageBitmapContentsArray image_bitmap_contents_array_;
 
@@ -256,18 +260,11 @@
   TransferredWasmModulesArray wasm_modules_;
   BlobDataHandleMap blob_data_handles_;
 
-  // These replace their corresponding ordinary members, once set.
-  // Once the SerializedScriptValue is being deserialized, real objects will be
-  // materialized here, but only the contents should exist when moving between
-  // threads, frames, etc.
-  struct ReceivedObjects {
-    PersistentHeapVector<Member<DOMArrayBufferBase>> array_buffers;
-    PersistentHeapVector<Member<ImageBitmap>> image_bitmaps;
-  };
-  Optional<ReceivedObjects> received_;
-
   bool has_registered_external_allocation_;
   bool transferables_need_external_allocation_registration_;
+#if DCHECK_IS_ON()
+  bool was_unpacked_ = false;
+#endif
 };
 
 template <>
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueFactory.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueFactory.cpp
index afe8c57..e7a6986 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueFactory.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueFactory.cpp
@@ -23,7 +23,17 @@
 }
 
 v8::Local<v8::Value> SerializedScriptValueFactory::Deserialize(
-    SerializedScriptValue* value,
+    RefPtr<SerializedScriptValue> value,
+    v8::Isolate* isolate,
+    const SerializedScriptValue::DeserializeOptions& options) {
+  TRACE_EVENT0("blink", "SerializedScriptValueFactory::deserialize");
+  V8ScriptValueDeserializer deserializer(ScriptState::Current(isolate),
+                                         std::move(value), options);
+  return deserializer.Deserialize();
+}
+
+v8::Local<v8::Value> SerializedScriptValueFactory::Deserialize(
+    UnpackedSerializedScriptValue* value,
     v8::Isolate* isolate,
     const SerializedScriptValue::DeserializeOptions& options) {
   TRACE_EVENT0("blink", "SerializedScriptValueFactory::deserialize");
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueFactory.h b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueFactory.h
index c6607f7a..abc8e57 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueFactory.h
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueFactory.h
@@ -26,6 +26,7 @@
 
  protected:
   friend class SerializedScriptValue;
+  friend class UnpackedSerializedScriptValue;
 
   // Following 2 methods are expected to be called by SerializedScriptValue.
 
@@ -41,7 +42,12 @@
       ExceptionState&);
 
   virtual v8::Local<v8::Value> Deserialize(
-      SerializedScriptValue*,
+      RefPtr<SerializedScriptValue>,
+      v8::Isolate*,
+      const SerializedScriptValue::DeserializeOptions&);
+
+  virtual v8::Local<v8::Value> Deserialize(
+      UnpackedSerializedScriptValue*,
       v8::Isolate*,
       const SerializedScriptValue::DeserializeOptions&);
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueThreadedTest.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueThreadedTest.cpp
new file mode 100644
index 0000000..c8f569b
--- /dev/null
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/SerializedScriptValueThreadedTest.cpp
@@ -0,0 +1,86 @@
+// 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 "bindings/core/v8/serialization/SerializedScriptValue.h"
+
+#include "bindings/core/v8/ExceptionState.h"
+#include "bindings/core/v8/V8BindingForTesting.h"
+#include "bindings/core/v8/WorkerOrWorkletScriptController.h"
+#include "bindings/core/v8/serialization/UnpackedSerializedScriptValue.h"
+#include "core/dom/DOMArrayBuffer.h"
+#include "core/dom/Document.h"
+#include "core/workers/WorkerThreadTestHelper.h"
+#include "platform/bindings/ToV8.h"
+
+namespace blink {
+
+// On debug builds, Oilpan contains checks that will fail if a persistent handle
+// is destroyed on the wrong thread.
+TEST(SerializedScriptValueThreadedTest,
+     SafeDestructionIfSendingThreadKeepsAlive) {
+  V8TestingScope scope;
+
+  // Start a worker.
+  WorkerReportingProxy proxy;
+  WorkerThreadForTest worker_thread(nullptr, proxy);
+  ParentFrameTaskRunners* parent_frame_task_runners =
+      ParentFrameTaskRunners::Create(scope.GetFrame());
+  worker_thread.StartWithSourceCode(scope.GetDocument().GetSecurityOrigin(),
+                                    "/* no worker script */",
+                                    parent_frame_task_runners);
+
+  // Create a serialized script value that contains transferred array buffer
+  // contents.
+  DOMArrayBuffer* array_buffer = DOMArrayBuffer::Create(1, 1);
+  Transferables transferables;
+  transferables.array_buffers.push_back(array_buffer);
+  SerializedScriptValue::SerializeOptions options;
+  options.transferables = &transferables;
+  RefPtr<SerializedScriptValue> serialized = SerializedScriptValue::Serialize(
+      scope.GetIsolate(),
+      ToV8(array_buffer, scope.GetContext()->Global(), scope.GetIsolate()),
+      options, ASSERT_NO_EXCEPTION);
+  EXPECT_TRUE(serialized);
+  EXPECT_TRUE(array_buffer->IsNeutered());
+
+  // Deserialize the serialized value on the worker.
+  // Intentionally keep a reference on this thread while this occurs.
+  //
+  // Note that the reference is passed strangely to make sure that the main
+  // thread keeps its reference, and the bound callback passes its reference
+  // into the block, without keeping an additional reference. (Failing to do
+  // this results in a data race.)
+  WaitableEvent done;
+  worker_thread.GetWorkerBackingThread().BackingThread().PostTask(
+      FROM_HERE,
+      CrossThreadBind(
+          [](WorkerThread* worker_thread, WaitableEvent* done,
+             RefPtr<SerializedScriptValue> serialized) {
+            WorkerOrWorkletScriptController* script =
+                worker_thread->GlobalScope()->ScriptController();
+            EXPECT_TRUE(script->IsContextInitialized());
+            ScriptState::Scope worker_scope(script->GetScriptState());
+            SerializedScriptValue::Unpack(serialized)
+                ->Deserialize(worker_thread->GetIsolate());
+
+            // Make sure this thread's references are dropped before the main
+            // thread continues.
+            serialized = nullptr;
+            ThreadState::Current()->CollectAllGarbage();
+            done->Signal();
+          },
+          CrossThreadUnretained(&worker_thread), CrossThreadUnretained(&done),
+          Passed(RefPtr<SerializedScriptValue>(serialized))));
+  done.Wait();
+
+  // Now destroy the value on the main thread.
+  EXPECT_TRUE(serialized->HasOneRef());
+  serialized = nullptr;
+
+  // Finally, shut down the worker thread.
+  worker_thread.Terminate();
+  worker_thread.WaitForShutdownForTesting();
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/UnpackedSerializedScriptValue.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/UnpackedSerializedScriptValue.cpp
new file mode 100644
index 0000000..5aa66b9
--- /dev/null
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/UnpackedSerializedScriptValue.cpp
@@ -0,0 +1,59 @@
+// 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 "bindings/core/v8/serialization/UnpackedSerializedScriptValue.h"
+
+#include "bindings/core/v8/serialization/SerializedScriptValue.h"
+#include "bindings/core/v8/serialization/SerializedScriptValueFactory.h"
+#include "core/dom/DOMArrayBuffer.h"
+#include "core/dom/DOMSharedArrayBuffer.h"
+#include "core/imagebitmap/ImageBitmap.h"
+#include "platform/wtf/typed_arrays/ArrayBufferContents.h"
+
+namespace blink {
+
+UnpackedSerializedScriptValue::UnpackedSerializedScriptValue(
+    RefPtr<SerializedScriptValue> value)
+    : value_(std::move(value)) {
+  auto& array_buffer_contents = value_->array_buffer_contents_array_;
+  if (!array_buffer_contents.IsEmpty()) {
+    array_buffers_.Grow(array_buffer_contents.size());
+    std::transform(
+        array_buffer_contents.begin(), array_buffer_contents.end(),
+        array_buffers_.begin(),
+        [](WTF::ArrayBufferContents& contents) -> DOMArrayBufferBase* {
+          if (contents.IsShared())
+            return DOMSharedArrayBuffer::Create(contents);
+          return DOMArrayBuffer::Create(contents);
+        });
+    array_buffer_contents.clear();
+  }
+
+  auto& image_bitmap_contents = value_->image_bitmap_contents_array_;
+  if (!image_bitmap_contents.IsEmpty()) {
+    image_bitmaps_.Grow(image_bitmap_contents.size());
+    std::transform(image_bitmap_contents.begin(), image_bitmap_contents.end(),
+                   image_bitmaps_.begin(),
+                   [](RefPtr<StaticBitmapImage>& contents) {
+                     return ImageBitmap::Create(std::move(contents));
+                   });
+    image_bitmap_contents.clear();
+  }
+}
+
+UnpackedSerializedScriptValue::~UnpackedSerializedScriptValue() {}
+
+DEFINE_TRACE(UnpackedSerializedScriptValue) {
+  visitor->Trace(array_buffers_);
+  visitor->Trace(image_bitmaps_);
+}
+
+v8::Local<v8::Value> UnpackedSerializedScriptValue::Deserialize(
+    v8::Isolate* isolate,
+    const DeserializeOptions& options) {
+  return SerializedScriptValueFactory::Instance().Deserialize(this, isolate,
+                                                              options);
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/UnpackedSerializedScriptValue.h b/third_party/WebKit/Source/bindings/core/v8/serialization/UnpackedSerializedScriptValue.h
new file mode 100644
index 0000000..3933501
--- /dev/null
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/UnpackedSerializedScriptValue.h
@@ -0,0 +1,78 @@
+// 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 UnpackedSerializedScriptValue_h
+#define UnpackedSerializedScriptValue_h
+
+#include "bindings/core/v8/serialization/SerializedScriptValue.h"
+#include "core/CoreExport.h"
+#include "platform/heap/GarbageCollected.h"
+#include "platform/heap/Handle.h"
+#include "platform/heap/HeapAllocator.h"
+#include "platform/wtf/RefPtr.h"
+#include "platform/wtf/Vector.h"
+
+namespace blink {
+
+class DOMArrayBufferBase;
+class ImageBitmap;
+
+// Represents the "unpacked" materialized objects created after receiving the
+// transferred contents of a SerializedScriptValue, e.g. from another thread.
+//
+// These contents should not (or cannot) be copied, but must be attached to a
+// non-thread-safe object for use. For instance, an ArrayBuffer must be created
+// on the heap to own the array buffer contents, create a JavaScript wrapper
+// object, and so on.
+//
+// This "unpacking" can only be done once, and the resulting state must be
+// manipulated and ultimately collected on the thread on which it was unpacked.
+//
+// However, these unpacked objects aren't necessarily transient either. For
+// instance, the data of a MessageEvent might be requested in different isolated
+// worlds, for which one object underlying each transferred object must exist,
+// but (for security reasons) separate JavaScript wrappers must exist. For this
+// reason, a SerializedScriptValue can only be unpacked once, but thereafter it
+// can be deserialized multiple times.
+class CORE_EXPORT UnpackedSerializedScriptValue
+    : public GarbageCollectedFinalized<UnpackedSerializedScriptValue> {
+ public:
+  ~UnpackedSerializedScriptValue();
+
+  DECLARE_TRACE();
+
+  SerializedScriptValue* Value() { return value_.Get(); }
+  const SerializedScriptValue* Value() const { return value_.Get(); }
+
+  const HeapVector<Member<DOMArrayBufferBase>>& ArrayBuffers() const {
+    return array_buffers_;
+  }
+  const HeapVector<Member<ImageBitmap>>& ImageBitmaps() const {
+    return image_bitmaps_;
+  }
+
+  using DeserializeOptions = SerializedScriptValue::DeserializeOptions;
+  v8::Local<v8::Value> Deserialize(
+      v8::Isolate*,
+      const DeserializeOptions& = DeserializeOptions());
+
+ private:
+  // Private so that callers use SerializedScriptValue::Unpack.
+  explicit UnpackedSerializedScriptValue(RefPtr<SerializedScriptValue>);
+
+  // The underlying serialized data.
+  RefPtr<SerializedScriptValue> value_;
+
+  // These replace their corresponding members in SerializedScriptValue, once
+  // set. Once the value is being deserialized, objects will be materialized
+  // here.
+  HeapVector<Member<DOMArrayBufferBase>> array_buffers_;
+  HeapVector<Member<ImageBitmap>> image_bitmaps_;
+
+  friend class SerializedScriptValue;
+};
+
+}  // namespace blink
+
+#endif  // UnpackedSerializedScriptValue_h
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.cpp
index 77b0abe..84f51ec 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.cpp
@@ -5,6 +5,7 @@
 #include "bindings/core/v8/serialization/V8ScriptValueDeserializer.h"
 
 #include "bindings/core/v8/ToV8ForCore.h"
+#include "bindings/core/v8/serialization/UnpackedSerializedScriptValue.h"
 #include "core/dom/DOMArrayBuffer.h"
 #include "core/dom/DOMSharedArrayBuffer.h"
 #include "core/dom/ExecutionContext.h"
@@ -86,10 +87,35 @@
 
 V8ScriptValueDeserializer::V8ScriptValueDeserializer(
     RefPtr<ScriptState> script_state,
-    RefPtr<SerializedScriptValue> serialized_script_value,
+    UnpackedSerializedScriptValue* unpacked_value,
+    const Options& options)
+    : V8ScriptValueDeserializer(std::move(script_state),
+                                unpacked_value,
+                                unpacked_value->Value(),
+                                options) {}
+
+V8ScriptValueDeserializer::V8ScriptValueDeserializer(
+    RefPtr<ScriptState> script_state,
+    RefPtr<SerializedScriptValue> value,
+    const Options& options)
+    : V8ScriptValueDeserializer(std::move(script_state),
+                                nullptr,
+                                std::move(value),
+                                options) {
+  DCHECK(!serialized_script_value_->HasPackedContents())
+      << "If the provided SerializedScriptValue could contain packed contents "
+         "due to transfer, then it must be unpacked before deserialization. "
+         "See SerializedScriptValue::Unpack.";
+}
+
+V8ScriptValueDeserializer::V8ScriptValueDeserializer(
+    RefPtr<ScriptState> script_state,
+    UnpackedSerializedScriptValue* unpacked_value,
+    RefPtr<SerializedScriptValue> value,
     const Options& options)
     : script_state_(std::move(script_state)),
-      serialized_script_value_(std::move(serialized_script_value)),
+      unpacked_value_(unpacked_value),
+      serialized_script_value_(value),
       deserializer_(script_state_->GetIsolate(),
                     serialized_script_value_->Data(),
                     serialized_script_value_->DataLengthInBytes(),
@@ -142,15 +168,17 @@
 }
 
 void V8ScriptValueDeserializer::Transfer() {
+  // Thre's nothing to transfer if the deserializer was not given an unpacked
+  // value.
+  if (!unpacked_value_)
+    return;
+
   v8::Isolate* isolate = script_state_->GetIsolate();
   v8::Local<v8::Context> context = script_state_->GetContext();
   v8::Local<v8::Object> creation_context = context->Global();
 
-  // Receive the transfer, making the received objects available.
-  serialized_script_value_->ReceiveTransfer();
-
   // Transfer array buffers.
-  const auto& array_buffers = serialized_script_value_->ReceivedArrayBuffers();
+  const auto& array_buffers = unpacked_value_->ArrayBuffers();
   for (unsigned i = 0; i < array_buffers.size(); i++) {
     DOMArrayBufferBase* array_buffer = array_buffers.at(i);
     v8::Local<v8::Value> wrapper =
@@ -254,8 +282,9 @@
     }
     case kImageBitmapTransferTag: {
       uint32_t index = 0;
-      const auto& transferred_image_bitmaps =
-          serialized_script_value_->ReceivedImageBitmaps();
+      if (!unpacked_value_)
+        return nullptr;
+      const auto& transferred_image_bitmaps = unpacked_value_->ImageBitmaps();
       if (!ReadUint32(&index) || index >= transferred_image_bitmaps.size())
         return nullptr;
       return transferred_image_bitmaps[index].Get();
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.h b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.h
index e493efe..3962152 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.h
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueDeserializer.h
@@ -17,6 +17,7 @@
 namespace blink {
 
 class File;
+class UnpackedSerializedScriptValue;
 
 // Deserializes V8 values serialized using V8ScriptValueSerializer (or its
 // predecessor, ScriptValueSerializer).
@@ -34,6 +35,9 @@
  public:
   using Options = SerializedScriptValue::DeserializeOptions;
   V8ScriptValueDeserializer(RefPtr<ScriptState>,
+                            UnpackedSerializedScriptValue*,
+                            const Options& = Options());
+  V8ScriptValueDeserializer(RefPtr<ScriptState>,
                             RefPtr<SerializedScriptValue>,
                             const Options& = Options());
 
@@ -62,6 +66,10 @@
   bool ReadUTF8String(String* string_out);
 
  private:
+  V8ScriptValueDeserializer(RefPtr<ScriptState>,
+                            UnpackedSerializedScriptValue*,
+                            RefPtr<SerializedScriptValue>,
+                            const Options&);
   void Transfer();
 
   File* ReadFile();
@@ -77,6 +85,7 @@
                                                              uint32_t) override;
 
   RefPtr<ScriptState> script_state_;
+  Member<UnpackedSerializedScriptValue> unpacked_value_;
   RefPtr<SerializedScriptValue> serialized_script_value_;
   v8::ValueDeserializer deserializer_;
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializerTest.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializerTest.cpp
index f358d6a..7d2c3a9 100644
--- a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializerTest.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializerTest.cpp
@@ -25,6 +25,7 @@
 #include "bindings/core/v8/V8MessagePort.h"
 #include "bindings/core/v8/V8OffscreenCanvas.h"
 #include "bindings/core/v8/V8StringResource.h"
+#include "bindings/core/v8/serialization/UnpackedSerializedScriptValue.h"
 #include "bindings/core/v8/serialization/V8ScriptValueDeserializer.h"
 #include "core/dom/MessagePort.h"
 #include "core/fileapi/Blob.h"
@@ -98,10 +99,12 @@
   MessagePortArray* transferred_message_ports = MessagePort::EntanglePorts(
       *scope.GetExecutionContext(), std::move(channels));
 
+  UnpackedSerializedScriptValue* unpacked =
+      SerializedScriptValue::Unpack(std::move(serialized_script_value));
   V8ScriptValueDeserializer::Options deserialize_options;
   deserialize_options.message_ports = transferred_message_ports;
   deserialize_options.blob_info = blob_info;
-  V8ScriptValueDeserializer deserializer(script_state, serialized_script_value,
+  V8ScriptValueDeserializer deserializer(script_state, unpacked,
                                          deserialize_options);
   return deserializer.Deserialize();
 }
diff --git a/third_party/WebKit/Source/bindings/modules/v8/serialization/SerializedScriptValueForModulesFactory.cpp b/third_party/WebKit/Source/bindings/modules/v8/serialization/SerializedScriptValueForModulesFactory.cpp
index c93968db..2fc3bd3 100644
--- a/third_party/WebKit/Source/bindings/modules/v8/serialization/SerializedScriptValueForModulesFactory.cpp
+++ b/third_party/WebKit/Source/bindings/modules/v8/serialization/SerializedScriptValueForModulesFactory.cpp
@@ -23,7 +23,17 @@
 }
 
 v8::Local<v8::Value> SerializedScriptValueForModulesFactory::Deserialize(
-    SerializedScriptValue* value,
+    RefPtr<SerializedScriptValue> value,
+    v8::Isolate* isolate,
+    const SerializedScriptValue::DeserializeOptions& options) {
+  TRACE_EVENT0("blink", "SerializedScriptValueFactory::deserialize");
+  V8ScriptValueDeserializerForModules deserializer(
+      ScriptState::Current(isolate), std::move(value), options);
+  return deserializer.Deserialize();
+}
+
+v8::Local<v8::Value> SerializedScriptValueForModulesFactory::Deserialize(
+    UnpackedSerializedScriptValue* value,
     v8::Isolate* isolate,
     const SerializedScriptValue::DeserializeOptions& options) {
   TRACE_EVENT0("blink", "SerializedScriptValueFactory::deserialize");
diff --git a/third_party/WebKit/Source/bindings/modules/v8/serialization/SerializedScriptValueForModulesFactory.h b/third_party/WebKit/Source/bindings/modules/v8/serialization/SerializedScriptValueForModulesFactory.h
index 932627e..1b9181ac 100644
--- a/third_party/WebKit/Source/bindings/modules/v8/serialization/SerializedScriptValueForModulesFactory.h
+++ b/third_party/WebKit/Source/bindings/modules/v8/serialization/SerializedScriptValueForModulesFactory.h
@@ -26,7 +26,12 @@
       ExceptionState&) override;
 
   v8::Local<v8::Value> Deserialize(
-      SerializedScriptValue*,
+      RefPtr<SerializedScriptValue>,
+      v8::Isolate*,
+      const SerializedScriptValue::DeserializeOptions&) override;
+
+  v8::Local<v8::Value> Deserialize(
+      UnpackedSerializedScriptValue*,
       v8::Isolate*,
       const SerializedScriptValue::DeserializeOptions&) override;
 };
diff --git a/third_party/WebKit/Source/bindings/modules/v8/serialization/V8ScriptValueDeserializerForModules.h b/third_party/WebKit/Source/bindings/modules/v8/serialization/V8ScriptValueDeserializerForModules.h
index a11903af..baa27cfc 100644
--- a/third_party/WebKit/Source/bindings/modules/v8/serialization/V8ScriptValueDeserializerForModules.h
+++ b/third_party/WebKit/Source/bindings/modules/v8/serialization/V8ScriptValueDeserializerForModules.h
@@ -16,12 +16,19 @@
 class MODULES_EXPORT V8ScriptValueDeserializerForModules final
     : public V8ScriptValueDeserializer {
  public:
-  explicit V8ScriptValueDeserializerForModules(
-      RefPtr<ScriptState> script_state,
-      RefPtr<SerializedScriptValue> serialized_script_value,
-      const Options& options = Options())
-      : V8ScriptValueDeserializer(script_state,
-                                  serialized_script_value,
+  // TODO(jbroman): This should just be:
+  // using V8ScriptValueDeserializer::V8ScriptValueDeserializer;
+  // Unfortunately, MSVC 2015 emits C2248, claiming that it cannot access its
+  // own private members. Until it's gone, we write the constructors by hand.
+  V8ScriptValueDeserializerForModules(RefPtr<ScriptState> script_state,
+                                      UnpackedSerializedScriptValue* unpacked,
+                                      const Options& options = Options())
+      : V8ScriptValueDeserializer(std::move(script_state), unpacked, options) {}
+  V8ScriptValueDeserializerForModules(RefPtr<ScriptState> script_state,
+                                      RefPtr<SerializedScriptValue> value,
+                                      const Options& options = Options())
+      : V8ScriptValueDeserializer(std::move(script_state),
+                                  std::move(value),
                                   options) {}
 
  protected:
diff --git a/third_party/WebKit/Source/build/scripts/make_computed_style_base.py b/third_party/WebKit/Source/build/scripts/make_computed_style_base.py
index 713ec3e..f38ae4d 100755
--- a/third_party/WebKit/Source/build/scripts/make_computed_style_base.py
+++ b/third_party/WebKit/Source/build/scripts/make_computed_style_base.py
@@ -372,6 +372,12 @@
         type_name = property_['type_name']
         default_value = property_['default_value']
         size = None
+    elif property_['field_template'] == '<length>':
+        property_['field_template'] = 'external'
+        property_['type_name'] = type_name = 'Length'
+        default_value = property_['default_value']
+        property_['include_paths'] = ["platform/Length.h"]
+        size = None
     else:
         assert property_['field_template'] in ('monotonic_flag',)
         type_name = 'bool'
diff --git a/third_party/WebKit/Source/core/css/CSSProperties.json5 b/third_party/WebKit/Source/core/css/CSSProperties.json5
index b23c83c..a664428 100644
--- a/third_party/WebKit/Source/core/css/CSSProperties.json5
+++ b/third_party/WebKit/Source/core/css/CSSProperties.json5
@@ -101,6 +101,11 @@
         "storage_only",
         // Field is stored as a wrapper_pointer_name to a class.
         "pointer",
+        // Preset "length" for external and Length class
+        // This preset represents:  field_template: "external"
+        //                          type_name: "Length"
+        //                          include_paths: ["platform/Length.h"]
+        "<length>"
       ],
     },
 
@@ -963,9 +968,7 @@
       interpolable: true,
       typedom_types: ["Length", "Percent"],
       keywords: ["auto"],
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "surround",
       default_value: "Length()",
     },
@@ -1251,11 +1254,9 @@
       api_methods: ["parseSingleValue"],
       converter: "ConvertLengthOrAuto",
       interpolable: true,
-      type_name: "Length",
-      field_template: "external",
+      field_template: "<length>",
       default_value: "Length(kAuto)",
       field_group: "rare-non-inherited->flexible-box",
-      include_paths: ["platform/Length.h"],
     },
     {
       name: "flex-direction",
@@ -1365,11 +1366,9 @@
       name: "grid-column-gap",
       converter: "ConvertLength",
       runtime_flag: "CSSGridLayout",
-      type_name: "Length",
-      field_template: "external",
+      field_template: "<length>",
       default_value: "Length(kFixed)",
       field_group: "rare-non-inherited->grid",
-      include_paths: ["platform/Length.h"],
     },
     {
       name: "grid-column-start",
@@ -1397,11 +1396,9 @@
       name: "grid-row-gap",
       converter: "ConvertLength",
       runtime_flag: "CSSGridLayout",
-      type_name: "Length",
-      field_template: "external",
+      field_template: "<length>",
       default_value: "Length(kFixed)",
       field_group: "rare-non-inherited->grid",
-      include_paths: ["platform/Length.h"],
     },
     {
       name: "grid-row-start",
@@ -1450,9 +1447,7 @@
       interpolable: true,
       typedom_types: ["Length", "Percent"],
       keywords: ["auto", "fit-content", "min-content", "max-content"],
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "box",
       default_value: "Length()",
     },
@@ -1537,9 +1532,7 @@
       interpolable: true,
       typedom_types: ["Length", "Percent"],
       keywords: ["auto"],
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "surround",
       default_value: "Length()",
     },
@@ -1624,9 +1617,7 @@
       api_methods: ["parseSingleValue"],
       converter: "ConvertQuirkyLength",
       interpolable: true,
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "surround",
       default_value: "Length(kFixed)",
     },
@@ -1636,9 +1627,7 @@
       api_methods: ["parseSingleValue"],
       converter: "ConvertQuirkyLength",
       interpolable: true,
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "surround",
       default_value: "Length(kFixed)",
     },
@@ -1648,9 +1637,7 @@
       api_methods: ["parseSingleValue"],
       converter: "ConvertQuirkyLength",
       interpolable: true,
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "surround",
       default_value: "Length(kFixed)",
     },
@@ -1660,9 +1647,7 @@
       api_methods: ["parseSingleValue"],
       converter: "ConvertQuirkyLength",
       interpolable: true,
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "surround",
       default_value: "Length(kFixed)",
     },
@@ -1715,9 +1700,7 @@
       converter: "ConvertLengthMaxSizing",
       is_descriptor: true,
       interpolable: true,
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "box",
       default_value: "Length(kMaxSizeNone)",
     },
@@ -1726,9 +1709,7 @@
       converter: "ConvertLengthMaxSizing",
       is_descriptor: true,
       interpolable: true,
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "box",
       default_value: "Length(kMaxSizeNone)",
     },
@@ -1738,9 +1719,7 @@
       converter: "ConvertLengthSizing",
       is_descriptor: true,
       interpolable: true,
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "box",
       default_value: "Length()",
     },
@@ -1750,9 +1729,7 @@
       converter: "ConvertLengthSizing",
       is_descriptor: true,
       interpolable: true,
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "box",
       default_value: "Length()",
     },
@@ -1806,9 +1783,7 @@
       api_class: true,
       converter: "ConvertLength",
       interpolable: true,
-      field_template: "external",
-      type_name: "Length",
-      include_paths: ["platform/Length.h"],
+      field_template: "<length>",
       field_group: "rare-non-inherited->transform",
       default_value: "Length(0, kFixed)",
     },
@@ -1969,9 +1944,7 @@
       api_methods: ["parseSingleValue"],
       converter: "ConvertLength",
       interpolable: true,
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "surround",
       default_value: "Length(kFixed)",
     },
@@ -1981,9 +1954,7 @@
       api_methods: ["parseSingleValue"],
       converter: "ConvertLength",
       interpolable: true,
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "surround",
       default_value: "Length(kFixed)",
     },
@@ -1993,9 +1964,7 @@
       api_methods: ["parseSingleValue"],
       converter: "ConvertLength",
       interpolable: true,
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "surround",
       default_value: "Length(kFixed)",
     },
@@ -2005,9 +1974,7 @@
       api_methods: ["parseSingleValue"],
       converter: "ConvertLength",
       interpolable: true,
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "surround",
       default_value: "Length(kFixed)",
     },
@@ -2090,9 +2057,7 @@
       interpolable: true,
       typedom_types: ["Length", "Percent"],
       keywords: ["auto"],
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "surround",
       default_value: "Length()",
     },
@@ -2167,11 +2132,9 @@
       api_class: "CSSPropertyAPIScrollPadding",
       api_methods: ["parseSingleValue"],
       converter: "ConvertLength",
-      include_paths: ["platform/Length.h"],
       typedom_types: ["Length", "Percent"],
-      type_name: "Length",
       runtime_flag: "CSSScrollSnapPoints",
-      field_template: "external",
+      field_template: "<length>",
       field_group: "rare-non-inherited->scroll-snap",
       default_value: "Length()",
     },
@@ -2180,11 +2143,9 @@
       api_class: "CSSPropertyAPIScrollPadding",
       api_methods: ["parseSingleValue"],
       converter: "ConvertLength",
-      include_paths: ["platform/Length.h"],
       typedom_types: ["Length", "Percent"],
-      type_name: "Length",
       runtime_flag: "CSSScrollSnapPoints",
-      field_template: "external",
+      field_template: "<length>",
       field_group: "rare-non-inherited->scroll-snap",
       default_value: "Length()",
     },
@@ -2193,11 +2154,9 @@
       api_class: "CSSPropertyAPIScrollPadding",
       api_methods: ["parseSingleValue"],
       converter: "ConvertLength",
-      include_paths: ["platform/Length.h"],
       typedom_types: ["Length", "Percent"],
-      type_name: "Length",
       runtime_flag: "CSSScrollSnapPoints",
-      field_template: "external",
+      field_template: "<length>",
       field_group: "rare-non-inherited->scroll-snap",
       default_value: "Length()",
     },
@@ -2206,11 +2165,9 @@
       api_class: "CSSPropertyAPIScrollPadding",
       api_methods: ["parseSingleValue"],
       converter: "ConvertLength",
-      include_paths: ["platform/Length.h"],
       typedom_types: ["Length", "Percent"],
-      type_name: "Length",
       runtime_flag: "CSSScrollSnapPoints",
-      field_template: "external",
+      field_template: "<length>",
       field_group: "rare-non-inherited->scroll-snap",
       default_value: "Length()",
     },
@@ -2267,10 +2224,8 @@
       api_class: "CSSPropertyAPIScrollSnapMargin",
       api_methods: ["parseSingleValue"],
       converter: "ConvertLength",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
       runtime_flag: "CSSScrollSnapPoints",
-      field_template: "external",
+      field_template: "<length>",
       field_group: "rare-non-inherited->scroll-snap",
       default_value: "Length()",
     },
@@ -2279,10 +2234,8 @@
       api_class: "CSSPropertyAPIScrollSnapMargin",
       api_methods: ["parseSingleValue"],
       converter: "ConvertLength",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
       runtime_flag: "CSSScrollSnapPoints",
-      field_template: "external",
+      field_template: "<length>",
       field_group: "rare-non-inherited->scroll-snap",
       default_value: "Length()",
     },
@@ -2291,10 +2244,8 @@
       api_class: "CSSPropertyAPIScrollSnapMargin",
       api_methods: ["parseSingleValue"],
       converter: "ConvertLength",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
       runtime_flag: "CSSScrollSnapPoints",
-      field_template: "external",
+      field_template: "<length>",
       field_group: "rare-non-inherited->scroll-snap",
       default_value: "Length()",
     },
@@ -2303,10 +2254,8 @@
       api_class: "CSSPropertyAPIScrollSnapMargin",
       api_methods: ["parseSingleValue"],
       converter: "ConvertLength",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
       runtime_flag: "CSSScrollSnapPoints",
-      field_template: "external",
+      field_template: "<length>",
       field_group: "rare-non-inherited->scroll-snap",
       default_value: "Length()",
     },
@@ -2371,9 +2320,7 @@
       api_methods: ["parseSingleValue"],
       converter: "ConvertLength",
       interpolable: true,
-      field_template: "external",
-      type_name: "Length",
-      include_paths: ["platform/Length.h"],
+      field_template: "<length>",
       field_group: "rare-non-inherited",
       default_value: "Length(0, kFixed)",
     },
@@ -2612,9 +2559,7 @@
       custom_all: true,
       inherited: true,
       interpolable: true,
-      field_template: "external",
-      type_name: "Length",
-      include_paths: ["platform/Length.h"],
+      field_template: "<length>",
       default_value: "Length(kFixed)",
       field_group: "rare-inherited",
     },
@@ -2693,9 +2638,7 @@
       interpolable: true,
       typedom_types: ["Length", "Percent"],
       keywords: ["auto"],
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "surround",
       default_value: "Length()",
     },
@@ -3403,9 +3346,7 @@
       interpolable: true,
       typedom_types: ["Length", "Percent"],
       keywords: ["auto", "fit-content", "min-content", "max-content"],
-      field_template: "external",
-      include_paths: ["platform/Length.h"],
-      type_name: "Length",
+      field_template: "<length>",
       field_group: "box",
       default_value: "Length()"
     },
diff --git a/third_party/WebKit/Source/core/dom/DocumentLifecycle.cpp b/third_party/WebKit/Source/core/dom/DocumentLifecycle.cpp
index d1a39a9..dfd3e54 100644
--- a/third_party/WebKit/Source/core/dom/DocumentLifecycle.cpp
+++ b/third_party/WebKit/Source/core/dom/DocumentLifecycle.cpp
@@ -230,24 +230,6 @@
         return true;
       if (next_state == kInCompositingUpdate)
         return true;
-      if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-        if (next_state == kInPrePaint)
-          return true;
-      } else if (next_state == kInPaintInvalidation) {
-        return true;
-      }
-      break;
-    case kInPaintInvalidation:
-      DCHECK(!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
-      return next_state == kPaintInvalidationClean;
-    case kPaintInvalidationClean:
-      DCHECK(!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
-      if (next_state == kInStyleRecalc)
-        return true;
-      if (next_state == kInPreLayout)
-        return true;
-      if (next_state == kInCompositingUpdate)
-        return true;
       if (next_state == kInPrePaint)
         return true;
       break;
@@ -265,8 +247,7 @@
       if (!RuntimeEnabledFeatures::SlimmingPaintV2Enabled() &&
           next_state == kInCompositingUpdate)
         return true;
-      if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled() &&
-          next_state == kInPrePaint)
+      if (next_state == kInPrePaint)
         return true;
       break;
     case kInPaint:
@@ -281,8 +262,7 @@
       if (!RuntimeEnabledFeatures::SlimmingPaintV2Enabled() &&
           next_state == kInCompositingUpdate)
         return true;
-      if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled() &&
-          next_state == kInPrePaint)
+      if (next_state == kInPrePaint)
         return true;
       break;
     case kStopping:
@@ -306,8 +286,7 @@
   return state_ == kStyleClean || state_ == kLayoutSubtreeChangeClean ||
          state_ == kAfterPerformLayout || state_ == kLayoutClean ||
          state_ == kCompositingInputsClean || state_ == kCompositingClean ||
-         state_ == kPaintInvalidationClean || state_ == kPrePaintClean ||
-         state_ == kPaintClean;
+         state_ == kPrePaintClean || state_ == kPaintClean;
 }
 
 #define DEBUG_STRING_CASE(StateName) \
@@ -331,8 +310,6 @@
     DEBUG_STRING_CASE(kInCompositingUpdate);
     DEBUG_STRING_CASE(kCompositingInputsClean);
     DEBUG_STRING_CASE(kCompositingClean);
-    DEBUG_STRING_CASE(kInPaintInvalidation);
-    DEBUG_STRING_CASE(kPaintInvalidationClean);
     DEBUG_STRING_CASE(kInPrePaint);
     DEBUG_STRING_CASE(kPrePaintClean);
     DEBUG_STRING_CASE(kInPaint);
diff --git a/third_party/WebKit/Source/core/dom/DocumentLifecycle.h b/third_party/WebKit/Source/core/dom/DocumentLifecycle.h
index 7f3e995..f22151e 100644
--- a/third_party/WebKit/Source/core/dom/DocumentLifecycle.h
+++ b/third_party/WebKit/Source/core/dom/DocumentLifecycle.h
@@ -70,9 +70,6 @@
     kCompositingInputsClean,
     kCompositingClean,
 
-    kInPaintInvalidation,
-    kPaintInvalidationClean,
-
     // In InPrePaint step, any data needed by painting are prepared.
     // When RuntimeEnabledFeatures::SlimmingPaintV2Enabled, paint property trees
     // are built.
@@ -247,14 +244,13 @@
          state_ == kStyleClean || state_ == kLayoutSubtreeChangeClean ||
          state_ == kInPreLayout || state_ == kLayoutClean ||
          state_ == kCompositingInputsClean || state_ == kCompositingClean ||
-         state_ == kPaintInvalidationClean || state_ == kPrePaintClean ||
-         state_ == kPaintClean || state_ == kStopping;
+         state_ == kPrePaintClean || state_ == kPaintClean ||
+         state_ == kStopping;
 }
 
 inline bool DocumentLifecycle::StateAllowsLayoutInvalidation() const {
   return state_ != kInPerformLayout && state_ != kInCompositingUpdate &&
-         state_ != kInPaintInvalidation && state_ != kInPrePaint &&
-         state_ != kInPaint;
+         state_ != kInPrePaint && state_ != kInPaint;
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/Fullscreen.cpp b/third_party/WebKit/Source/core/dom/Fullscreen.cpp
index 548ac6f0..ce5ad71 100644
--- a/third_party/WebKit/Source/core/dom/Fullscreen.cpp
+++ b/third_party/WebKit/Source/core/dom/Fullscreen.cpp
@@ -901,8 +901,7 @@
     frame->GetEventHandler().ScheduleHoverStateUpdate();
     frame->GetChromeClient().FullscreenElementChanged(old_element, new_element);
 
-    if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled() &&
-        !RuntimeEnabledFeatures::RootLayerScrollingEnabled()) {
+    if (!RuntimeEnabledFeatures::RootLayerScrollingEnabled()) {
       // Fullscreen status affects scroll paint properties through
       // LocalFrameView::UserInputScrollable().
       if (LocalFrameView* frame_view = frame->View())
diff --git a/third_party/WebKit/Source/core/editing/FrameCaret.cpp b/third_party/WebKit/Source/core/editing/FrameCaret.cpp
index e6a51f80f..6e04e4fd 100644
--- a/third_party/WebKit/Source/core/editing/FrameCaret.cpp
+++ b/third_party/WebKit/Source/core/editing/FrameCaret.cpp
@@ -173,7 +173,7 @@
 
 IntRect FrameCaret::AbsoluteCaretBounds() const {
   DCHECK_NE(frame_->GetDocument()->Lifecycle().GetState(),
-            DocumentLifecycle::kInPaintInvalidation);
+            DocumentLifecycle::kInPrePaint);
   DCHECK(!frame_->GetDocument()->NeedsLayoutTreeUpdate());
   DocumentLifecycle::DisallowTransitionScope disallow_transition(
       frame_->GetDocument()->Lifecycle());
diff --git a/third_party/WebKit/Source/core/events/MessageEvent.cpp b/third_party/WebKit/Source/core/events/MessageEvent.cpp
index 53ad37f..0b14a81 100644
--- a/third_party/WebKit/Source/core/events/MessageEvent.cpp
+++ b/third_party/WebKit/Source/core/events/MessageEvent.cpp
@@ -82,13 +82,14 @@
                            const String& suborigin)
     : Event(EventTypeNames::message, false, false),
       data_type_(kDataTypeSerializedScriptValue),
-      data_as_serialized_script_value_(std::move(data)),
+      data_as_serialized_script_value_(
+          SerializedScriptValue::Unpack(std::move(data))),
       origin_(origin),
       last_event_id_(last_event_id),
       source_(source),
       ports_(ports) {
   if (data_as_serialized_script_value_)
-    data_as_serialized_script_value_
+    data_as_serialized_script_value_->Value()
         ->RegisterMemoryAllocatedWithCurrentScriptContext();
   DCHECK(IsValidSource(source_.Get()));
 }
@@ -101,14 +102,15 @@
                            const String& suborigin)
     : Event(EventTypeNames::message, false, false),
       data_type_(kDataTypeSerializedScriptValue),
-      data_as_serialized_script_value_(std::move(data)),
+      data_as_serialized_script_value_(
+          SerializedScriptValue::Unpack(std::move(data))),
       origin_(origin),
       last_event_id_(last_event_id),
       source_(source),
       channels_(std::move(channels)),
       suborigin_(suborigin) {
   if (data_as_serialized_script_value_)
-    data_as_serialized_script_value_
+    data_as_serialized_script_value_->Value()
         ->RegisterMemoryAllocatedWithCurrentScriptContext();
   DCHECK(IsValidSource(source_.Get()));
 }
@@ -186,7 +188,8 @@
   initEvent(type, can_bubble, cancelable);
 
   data_type_ = kDataTypeSerializedScriptValue;
-  data_as_serialized_script_value_ = std::move(data);
+  data_as_serialized_script_value_ =
+      SerializedScriptValue::Unpack(std::move(data));
   origin_ = origin;
   last_event_id_ = last_event_id;
   source_ = source;
@@ -194,7 +197,7 @@
   suborigin_ = "";
 
   if (data_as_serialized_script_value_)
-    data_as_serialized_script_value_
+    data_as_serialized_script_value_->Value()
         ->RegisterMemoryAllocatedWithCurrentScriptContext();
 }
 
@@ -247,6 +250,7 @@
 }
 
 DEFINE_TRACE(MessageEvent) {
+  visitor->Trace(data_as_serialized_script_value_);
   visitor->Trace(data_as_blob_);
   visitor->Trace(data_as_array_buffer_);
   visitor->Trace(source_);
diff --git a/third_party/WebKit/Source/core/events/MessageEvent.h b/third_party/WebKit/Source/core/events/MessageEvent.h
index 59dbe0e65..d2d4511 100644
--- a/third_party/WebKit/Source/core/events/MessageEvent.h
+++ b/third_party/WebKit/Source/core/events/MessageEvent.h
@@ -31,6 +31,7 @@
 
 #include <memory>
 #include "bindings/core/v8/serialization/SerializedScriptValue.h"
+#include "bindings/core/v8/serialization/UnpackedSerializedScriptValue.h"
 #include "core/CoreExport.h"
 #include "core/dom/DOMArrayBuffer.h"
 #include "core/dom/MessagePort.h"
@@ -140,8 +141,14 @@
     DCHECK_EQ(data_type_, kDataTypeScriptValue);
     return data_as_script_value_;
   }
+  // Use with caution. Since the data has already been unpacked, the underlying
+  // SerializedScriptValue will no longer contain transferred contents.
   SerializedScriptValue* DataAsSerializedScriptValue() const {
     DCHECK_EQ(data_type_, kDataTypeSerializedScriptValue);
+    return data_as_serialized_script_value_->Value();
+  }
+  UnpackedSerializedScriptValue* DataAsUnpackedSerializedScriptValue() const {
+    DCHECK_EQ(data_type_, kDataTypeSerializedScriptValue);
     return data_as_serialized_script_value_.Get();
   }
   String DataAsString() const {
@@ -157,11 +164,6 @@
     return data_as_array_buffer_.Get();
   }
 
-  void SetSerializedData(PassRefPtr<SerializedScriptValue> data) {
-    DCHECK(!data_as_serialized_script_value_);
-    data_as_serialized_script_value_ = std::move(data);
-  }
-
   void EntangleMessagePorts(ExecutionContext*);
 
   DECLARE_VIRTUAL_TRACE();
@@ -202,7 +204,7 @@
 
   DataType data_type_;
   ScriptValue data_as_script_value_;
-  RefPtr<SerializedScriptValue> data_as_serialized_script_value_;
+  Member<UnpackedSerializedScriptValue> data_as_serialized_script_value_;
   String data_as_string_;
   Member<Blob> data_as_blob_;
   Member<DOMArrayBuffer> data_as_array_buffer_;
diff --git a/third_party/WebKit/Source/core/exported/WebRemoteFrameImpl.cpp b/third_party/WebKit/Source/core/exported/WebRemoteFrameImpl.cpp
index 1c201913..6c10fbd 100644
--- a/third_party/WebKit/Source/core/exported/WebRemoteFrameImpl.cpp
+++ b/third_party/WebKit/Source/core/exported/WebRemoteFrameImpl.cpp
@@ -145,12 +145,6 @@
   return false;
 }
 
-WebAssociatedURLLoader* WebRemoteFrameImpl::CreateAssociatedURLLoader(
-    const WebAssociatedURLLoaderOptions&) {
-  NOTREACHED();
-  return nullptr;
-}
-
 WebLocalFrame* WebRemoteFrameImpl::CreateLocalChild(
     WebTreeScopeType scope,
     const WebString& name,
diff --git a/third_party/WebKit/Source/core/exported/WebRemoteFrameImpl.h b/third_party/WebKit/Source/core/exported/WebRemoteFrameImpl.h
index 71fc0b5..a3b0466 100644
--- a/third_party/WebKit/Source/core/exported/WebRemoteFrameImpl.h
+++ b/third_party/WebKit/Source/core/exported/WebRemoteFrameImpl.h
@@ -19,8 +19,6 @@
 class RemoteFrame;
 class RemoteFrameClientImpl;
 enum class WebFrameLoadType;
-class WebAssociatedURLLoader;
-struct WebAssociatedURLLoaderOptions;
 class WebView;
 
 class CORE_EXPORT WebRemoteFrameImpl final
@@ -43,8 +41,6 @@
   void StopLoading() override;
   void EnableViewSourceMode(bool enable) override;
   bool IsViewSourceModeEnabled() const override;
-  WebAssociatedURLLoader* CreateAssociatedURLLoader(
-      const WebAssociatedURLLoaderOptions&) override;
 
   // WebRemoteFrame methods:
   WebLocalFrame* CreateLocalChild(WebTreeScopeType,
diff --git a/third_party/WebKit/Source/core/frame/LocalFrame.cpp b/third_party/WebKit/Source/core/frame/LocalFrame.cpp
index c642ebe1..390f313 100644
--- a/third_party/WebKit/Source/core/frame/LocalFrame.cpp
+++ b/third_party/WebKit/Source/core/frame/LocalFrame.cpp
@@ -511,8 +511,7 @@
       ToLocalFrame(child)->SetPrinting(printing, FloatSize(), FloatSize(), 0);
   }
 
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    View()->SetSubtreeNeedsPaintPropertyUpdate();
+  View()->SetSubtreeNeedsPaintPropertyUpdate();
 
   if (!printing)
     GetDocument()->SetPrinting(Document::kNotPrinting);
diff --git a/third_party/WebKit/Source/core/frame/LocalFrameView.cpp b/third_party/WebKit/Source/core/frame/LocalFrameView.cpp
index f0a5ea2..2c6a3e9e 100644
--- a/third_party/WebKit/Source/core/frame/LocalFrameView.cpp
+++ b/third_party/WebKit/Source/core/frame/LocalFrameView.cpp
@@ -574,8 +574,7 @@
 
   UpdateParentScrollableAreaSet();
 
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled() &&
-      !RuntimeEnabledFeatures::RootLayerScrollingEnabled()) {
+  if (!RuntimeEnabledFeatures::RootLayerScrollingEnabled()) {
     // The overflow clip property depends on the frame size and the pre
     // translation property depends on the frame location.
     SetNeedsPaintPropertyUpdate();
@@ -1349,40 +1348,6 @@
   CheckDoesNotNeedLayout();
 }
 
-void LocalFrameView::DeprecatedInvalidateTree(
-    const PaintInvalidationState& paint_invalidation_state) {
-  DCHECK(!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
-
-  if (ShouldThrottleRendering())
-    return;
-
-  Lifecycle().AdvanceTo(DocumentLifecycle::kInPaintInvalidation);
-
-  CHECK(!GetLayoutViewItem().IsNull());
-  LayoutViewItem root_for_paint_invalidation = GetLayoutViewItem();
-  DCHECK(!root_for_paint_invalidation.NeedsLayout());
-
-  TRACE_EVENT1("blink", "LocalFrameView::invalidateTree", "root",
-               root_for_paint_invalidation.DebugName().Ascii());
-
-  InvalidatePaint(paint_invalidation_state);
-  root_for_paint_invalidation.DeprecatedInvalidateTree(
-      paint_invalidation_state);
-
-#if DCHECK_IS_ON()
-  GetLayoutView()->AssertSubtreeClearedPaintInvalidationFlags();
-#endif
-
-  Lifecycle().AdvanceTo(DocumentLifecycle::kPaintInvalidationClean);
-}
-
-void LocalFrameView::InvalidatePaint(
-    const PaintInvalidationState& paint_invalidation_state) {
-  CHECK(!GetLayoutViewItem().IsNull());
-  if (!RuntimeEnabledFeatures::RootLayerScrollingEnabled())
-    InvalidatePaintOfScrollControlsIfNeeded(paint_invalidation_state);
-}
-
 void LocalFrameView::SetNeedsPaintPropertyUpdate() {
   needs_paint_property_update_ = true;
   if (RuntimeEnabledFeatures::RootLayerScrollingEnabled()) {
@@ -1586,11 +1551,9 @@
   }
 
   // Ensure main thread scrolling reasons are recomputed.
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-    SetNeedsPaintPropertyUpdate();
-    // The object's scroll properties are not affected by its own background.
-    object->SetAncestorsNeedPaintPropertyUpdateForMainThreadScrolling();
-  }
+  SetNeedsPaintPropertyUpdate();
+  // The object's scroll properties are not affected by its own background.
+  object->SetAncestorsNeedPaintPropertyUpdateForMainThreadScrolling();
 }
 
 void LocalFrameView::RemoveBackgroundAttachmentFixedObject(
@@ -1605,11 +1568,9 @@
   }
 
   // Ensure main thread scrolling reasons are recomputed.
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-    SetNeedsPaintPropertyUpdate();
-    // The object's scroll properties are not affected by its own background.
-    object->SetAncestorsNeedPaintPropertyUpdateForMainThreadScrolling();
-  }
+  SetNeedsPaintPropertyUpdate();
+  // The object's scroll properties are not affected by its own background.
+  object->SetAncestorsNeedPaintPropertyUpdateForMainThreadScrolling();
 }
 
 void LocalFrameView::AddViewportConstrainedObject(LayoutObject& object) {
@@ -1663,7 +1624,6 @@
     if (layout_view->UsesCompositing()) {
       if (root_layer_scrolling_enabled) {
         layout_view->Layer()->SetNeedsCompositingInputsUpdate();
-        if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
           SetNeedsPaintPropertyUpdate();
       } else {
         layout_view->Compositor()->FrameViewDidChangeSize();
@@ -2951,8 +2911,7 @@
   // controls behavior so we need to update compositing based on updated clip
   // geometry.
   SetNeedsCompositingUpdate(kCompositingUpdateAfterGeometryChange);
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    SetNeedsPaintPropertyUpdate();
+  SetNeedsPaintPropertyUpdate();
 
   // Avoid drawing two sets of scrollbars when visual viewport provides
   // scrollbars.
@@ -3032,13 +2991,13 @@
 void LocalFrameView::ScheduleVisualUpdateForPaintInvalidationIfNeeded() {
   LocalFrame& local_frame_root = GetFrame().LocalFrameRoot();
   if (local_frame_root.View()->current_update_lifecycle_phases_target_state_ <
-          DocumentLifecycle::kPaintInvalidationClean ||
+          DocumentLifecycle::kPrePaintClean ||
       Lifecycle().GetState() >= DocumentLifecycle::kPrePaintClean) {
     // Schedule visual update to process the paint invalidation in the next
     // cycle.
     local_frame_root.ScheduleVisualUpdateUnlessThrottled();
   }
-  // Otherwise the paint invalidation will be handled in paint invalidation
+  // Otherwise the paint invalidation will be handled in the pre-paint
   // phase of this cycle.
 }
 
@@ -3189,9 +3148,6 @@
       }
 
       if (target_state >= DocumentLifecycle::kPrePaintClean) {
-        if (!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-          DeprecatedInvalidateTreeRecursive();
-
         if (!RuntimeEnabledFeatures::SlimmingPaintV2Enabled()) {
           if (view.Compositor()->InCompositingMode())
             GetScrollingCoordinator()->UpdateAfterCompositingChangeIfNeeded();
@@ -3276,7 +3232,7 @@
     }
   });
 
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
+  {
     SCOPED_BLINK_UMA_HISTOGRAM_TIMER("Blink.PrePaint.UpdateTime");
     PrePaintTreeWalk().Walk(*this);
   }
@@ -3482,60 +3438,6 @@
   GetFrame().GetPage()->GetDragCaret().UpdateStyleAndLayoutIfNeeded();
 }
 
-void LocalFrameView::DeprecatedInvalidateTreeRecursive() {
-  SCOPED_BLINK_UMA_HISTOGRAM_TIMER("Blink.PaintInvalidation.UpdateTime");
-  {
-    // For comparison to SlimmingPaintInvalidation.
-    SCOPED_BLINK_UMA_HISTOGRAM_TIMER("Blink.PrePaint.UpdateTime");
-    DeprecatedInvalidateTreeRecursiveInternal();
-  }
-}
-
-void LocalFrameView::DeprecatedInvalidateTreeRecursiveInternal() {
-  DCHECK(!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
-  CHECK(GetLayoutView());
-
-  // We need to stop recursing here since a child frame view might not be
-  // throttled even though we are (e.g., it didn't compute its visibility yet).
-  if (ShouldThrottleRendering())
-    return;
-  TRACE_EVENT0("blink",
-               "LocalFrameView::invalidateTreeIfNeededRecursiveInternal");
-
-  Vector<const LayoutObject*> pending_delayed_paint_invalidations;
-  PaintInvalidationState root_paint_invalidation_state(
-      *GetLayoutView(), pending_delayed_paint_invalidations);
-
-  if (Lifecycle().GetState() < DocumentLifecycle::kPaintInvalidationClean)
-    DeprecatedInvalidateTree(root_paint_invalidation_state);
-
-  // Some frames may be not reached during the above DeprecatedInvalidateTree
-  // because
-  // - the frame is a detached frame; or
-  // - it didn't need paint invalidation.
-  // We need to call invalidateTreeIfNeededRecursiveInternal() for such frames
-  // to finish required paint invalidation and advance their life cycle state.
-  for (Frame* child = frame_->Tree().FirstChild(); child;
-       child = child->Tree().NextSibling()) {
-    if (child->IsLocalFrame()) {
-      LocalFrameView& child_frame_view = *ToLocalFrame(child)->View();
-      // The children frames can be in any state, including stopping.
-      // Thus we have to check that it makes sense to do paint
-      // invalidation onto them here.
-      if (!child_frame_view.GetLayoutView())
-        continue;
-      child_frame_view.DeprecatedInvalidateTreeRecursiveInternal();
-    }
-  }
-
-  // Process objects needing paint invalidation on the next frame. See the
-  // definition of PaintInvalidationDelayedFull for more details.
-  for (auto& target : pending_delayed_paint_invalidations) {
-    target->GetMutableForPainting().SetShouldDoFullPaintInvalidation(
-        PaintInvalidationReason::kDelayedFull);
-  }
-}
-
 void LocalFrameView::EnableAutoSizeMode(const IntSize& min_size,
                                         const IntSize& max_size) {
   if (!auto_size_info_)
@@ -4417,8 +4319,7 @@
   if (RuntimeEnabledFeatures::RootLayerScrollingEnabled())
     return;
 
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    SetNeedsPaintPropertyUpdate();
+  SetNeedsPaintPropertyUpdate();
 
   // Avoid drawing two sets of scrollbars when visual viewport is enabled.
   if (VisualViewportSuppliesScrollbars()) {
@@ -4493,8 +4394,7 @@
   if (!ScrollContentsFastPath(-scroll_delta))
     ScrollContentsSlowPath();
 
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled() &&
-      !RuntimeEnabledFeatures::RootLayerScrollingEnabled()) {
+  if (!RuntimeEnabledFeatures::RootLayerScrollingEnabled()) {
     // Need to update scroll translation property.
     SetNeedsPaintPropertyUpdate();
   }
@@ -4909,8 +4809,7 @@
       scrolling_coordinator->FrameViewVisibilityDidChange();
     SetNeedsCompositingUpdate(kCompositingUpdateRebuildTree);
     UpdateParentScrollableAreaSet();
-    if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled() &&
-        !RuntimeEnabledFeatures::RootLayerScrollingEnabled()) {
+    if (!RuntimeEnabledFeatures::RootLayerScrollingEnabled()) {
       // The existance of scrolling properties depends on visibility through
       // isScrollable() so ensure properties are updated if visibility changes.
       SetNeedsPaintPropertyUpdate();
@@ -4938,8 +4837,7 @@
       scrolling_coordinator->FrameViewVisibilityDidChange();
     SetNeedsCompositingUpdate(kCompositingUpdateRebuildTree);
     UpdateParentScrollableAreaSet();
-    if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled() &&
-        !RuntimeEnabledFeatures::RootLayerScrollingEnabled()) {
+    if (!RuntimeEnabledFeatures::RootLayerScrollingEnabled()) {
       // The existance of scrolling properties depends on visibility through
       // isScrollable() so ensure properties are updated if visibility changes.
       SetNeedsPaintPropertyUpdate();
diff --git a/third_party/WebKit/Source/core/frame/LocalFrameView.h b/third_party/WebKit/Source/core/frame/LocalFrameView.h
index 50b4077..f5180c2 100644
--- a/third_party/WebKit/Source/core/frame/LocalFrameView.h
+++ b/third_party/WebKit/Source/core/frame/LocalFrameView.h
@@ -90,7 +90,6 @@
 class LayoutView;
 class PaintArtifactCompositor;
 class PaintController;
-class PaintInvalidationState;
 class Page;
 class PluginView;
 class PrintContext;
@@ -289,10 +288,10 @@
   Color DocumentBackgroundColor() const;
 
   // Run all needed lifecycle stages. After calling this method, all frames will
-  // be in the lifecycle state PaintInvalidationClean.  If lifecycle throttling
-  // is allowed (see DocumentLifecycle::AllowThrottlingScope), some frames may
-  // skip the lifecycle update (e.g., based on visibility) and will not end up
-  // being PaintInvalidationClean.
+  // be in the lifecycle state PaintClean.  If lifecycle throttling is allowed
+  // (see DocumentLifecycle::AllowThrottlingScope), some frames may skip the
+  // lifecycle update (e.g., based on visibility) and will not end up being
+  // PaintClean.
   void UpdateAllLifecyclePhases();
 
   // Everything except paint (the last phase).
@@ -777,10 +776,6 @@
   void EnqueueScrollAnchoringAdjustment(ScrollableArea*);
   void PerformScrollAnchoringAdjustments();
 
-  // For PaintInvalidator temporarily. TODO(wangxianzhu): Move into
-  // PaintInvalidator.
-  void InvalidatePaint(const PaintInvalidationState&);
-
   // Only for SPv2.
   std::unique_ptr<JSONObject> CompositedLayersAsJSON(LayerTreeFlags);
 
@@ -877,10 +872,6 @@
     AutoReset<bool> scope_;
   };
 
-  // Only for LayoutEmbeddedContent to traverse into sub frames during paint
-  // invalidation.
-  void DeprecatedInvalidateTree(const PaintInvalidationState&);
-
  private:
   explicit LocalFrameView(LocalFrame&, IntRect);
   class ScrollbarManager : public blink::ScrollbarManager {
@@ -916,7 +907,6 @@
   void UpdateLifecyclePhasesInternal(
       DocumentLifecycle::LifecycleState target_state);
 
-  void DeprecatedInvalidateTreeRecursive();
   void ScrollContentsIfNeededRecursive();
   void UpdateStyleAndLayoutIfNeededRecursive();
   void PrePaint();
@@ -924,7 +914,6 @@
   void PaintGraphicsLayerRecursively(GraphicsLayer*);
 
   void UpdateStyleAndLayoutIfNeededRecursiveInternal();
-  void DeprecatedInvalidateTreeRecursiveInternal();
 
   void PushPaintArtifactToCompositor(
       CompositorElementIdSet& composited_element_ids);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp
index c538e52..b144d18 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp
@@ -448,6 +448,17 @@
   return Response::OK();
 }
 
+Response InspectorPageAgent::addScriptToEvaluateOnNewDocument(
+    const String& source,
+    String* identifier) {
+  return addScriptToEvaluateOnLoad(source, identifier);
+}
+
+Response InspectorPageAgent::removeScriptToEvaluateOnNewDocument(
+    const String& identifier) {
+  return removeScriptToEvaluateOnLoad(identifier);
+}
+
 Response InspectorPageAgent::setAutoAttachToCreatedPages(bool auto_attach) {
   state_->setBoolean(PageAgentState::kAutoAttachToCreatedPages, auto_attach);
   return Response::OK();
diff --git a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.h b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.h
index e251770..ce78a23 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.h
@@ -112,6 +112,11 @@
                                                String* identifier) override;
   protocol::Response removeScriptToEvaluateOnLoad(
       const String& identifier) override;
+  protocol::Response addScriptToEvaluateOnNewDocument(
+      const String& source,
+      String* identifier) override;
+  protocol::Response removeScriptToEvaluateOnNewDocument(
+      const String& identifier) override;
   protocol::Response setAutoAttachToCreatedPages(bool) override;
   protocol::Response reload(Maybe<bool> bypass_cache,
                             Maybe<String> script_to_evaluate_on_load) override;
diff --git a/third_party/WebKit/Source/core/inspector/browser_protocol.json b/third_party/WebKit/Source/core/inspector/browser_protocol.json
index a2970a5..b051b2da 100644
--- a/third_party/WebKit/Source/core/inspector/browser_protocol.json
+++ b/third_party/WebKit/Source/core/inspector/browser_protocol.json
@@ -232,6 +232,8 @@
                 "returns": [
                     { "name": "identifier", "$ref": "ScriptIdentifier", "description": "Identifier of the added script." }
                 ],
+                "deprecated": true,
+                "description": "Deprecated, please use addScriptToEvaluateOnNewDocument instead.",
                 "experimental": true
             },
             {
@@ -239,6 +241,27 @@
                 "parameters": [
                     { "name": "identifier", "$ref": "ScriptIdentifier" }
                 ],
+                "deprecated": true,
+                "description": "Deprecated, please use removeScriptToEvaluateOnNewDocument instead.",
+                "experimental": true
+            },
+            {
+                "name": "addScriptToEvaluateOnNewDocument",
+                "parameters": [
+                    { "name": "source", "type": "string" }
+                ],
+                "returns": [
+                    { "name": "identifier", "$ref": "ScriptIdentifier", "description": "Identifier of the added script." }
+                ],
+                "description": "Evaluates given script in every frame upon creation (before loading frame's scripts).",
+                "experimental": true
+            },
+            {
+                "name": "removeScriptToEvaluateOnNewDocument",
+                "parameters": [
+                    { "name": "identifier", "$ref": "ScriptIdentifier" }
+                ],
+                "description": "Removes given script from the list.",
                 "experimental": true
             },
             {
diff --git a/third_party/WebKit/Source/core/layout/BUILD.gn b/third_party/WebKit/Source/core/layout/BUILD.gn
index 2ff5fdf2..ce9de84 100644
--- a/third_party/WebKit/Source/core/layout/BUILD.gn
+++ b/third_party/WebKit/Source/core/layout/BUILD.gn
@@ -214,8 +214,6 @@
     "OrderIterator.cpp",
     "OrderIterator.h",
     "OverflowModel.h",
-    "PaintInvalidationState.cpp",
-    "PaintInvalidationState.h",
     "PointerEventsHitRules.cpp",
     "PointerEventsHitRules.h",
     "ScrollAlignment.cpp",
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp
index a4b2f6c0..403034d 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp
@@ -278,11 +278,9 @@
     if (!should_clip_overflow)
       GetScrollableArea()->InvalidateAllStickyConstraints();
     SetMayNeedPaintInvalidationSubtree();
-    if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-      // The overflow clip paint property depends on whether overflow clip is
-      // present so we need to update paint properties if this changes.
-      SetNeedsPaintPropertyUpdate();
-    }
+    // The overflow clip paint property depends on whether overflow clip is
+    // present so we need to update paint properties if this changes.
+    SetNeedsPaintPropertyUpdate();
   }
   SetHasOverflowClip(should_clip_overflow);
 }
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
index a6a075f..699b0188 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
@@ -4743,14 +4743,6 @@
         include_block_overflows);
 }
 
-PaintInvalidationReason LayoutBlockFlow::DeprecatedInvalidatePaint(
-    const PaintInvalidationState& paint_invalidation_state) {
-  if (ContainsFloats())
-    paint_invalidation_state.PaintingLayer().SetNeedsPaintPhaseFloat();
-
-  return LayoutBlock::DeprecatedInvalidatePaint(paint_invalidation_state);
-}
-
 void LayoutBlockFlow::InvalidateDisplayItemClients(
     PaintInvalidationReason invalidation_reason) const {
   BlockFlowPaintInvalidator(*this).InvalidateDisplayItemClients(
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.h b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.h
index 11753b74..a7c614d 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.h
+++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.h
@@ -478,8 +478,6 @@
                        IncludeBlockVisualOverflowOrNot) const override;
 
   bool PaintedOutputOfObjectHasNoEffectRegardlessOfSize() const override;
-  PaintInvalidationReason DeprecatedInvalidatePaint(
-      const PaintInvalidationState&) override;
   void InvalidateDisplayItemClients(PaintInvalidationReason) const override;
 
   Node* NodeForHitTest() const final;
diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
index d20e35d..a6327cb 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
@@ -332,8 +332,7 @@
 
     UpdateScrollSnapMappingAfterStyleChange(&new_style, old_style);
 
-    if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled() &&
-        ShouldClipOverflow()) {
+    if (ShouldClipOverflow()) {
       // The overflow clip paint property depends on border sizes through
       // overflowClipRect(), and border radii, so we update properties on
       // border size or radii change.
@@ -1633,11 +1632,11 @@
     return true;
   }
 
-  BackgroundImageGeometry geometry;
+  BackgroundImageGeometry geometry(*this);
   // TODO(jchaffraix): This function should be rethought as it's called during
   // and outside of the paint phase. Potentially returning different results at
   // different phases.
-  geometry.Calculate(*this, nullptr, nullptr, kGlobalPaintNormalPhase,
+  geometry.Calculate(nullptr, kGlobalPaintNormalPhase,
                      Style()->BackgroundLayers(), background_rect);
   if (geometry.HasNonLocalGeometry())
     return false;
@@ -1890,20 +1889,6 @@
       PaintInvalidationReason::kFull);
 }
 
-PaintInvalidationReason LayoutBox::DeprecatedInvalidatePaint(
-    const PaintInvalidationState& paint_invalidation_state) {
-  if (HasBoxDecorationBackground()
-      // We also paint overflow controls in background phase.
-      || (HasOverflowClip() && GetScrollableArea()->HasOverflowControls())) {
-    PaintLayer& layer = paint_invalidation_state.PaintingLayer();
-    if (&layer.GetLayoutObject() != this)
-      layer.SetNeedsPaintPhaseDescendantBlockBackgrounds();
-  }
-
-  return LayoutBoxModelObject::DeprecatedInvalidatePaint(
-      paint_invalidation_state);
-}
-
 PaintInvalidationReason LayoutBox::InvalidatePaint(
     const PaintInvalidatorContext& context) const {
   return BoxPaintInvalidator(*this, context).InvalidatePaint();
diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.h b/third_party/WebKit/Source/core/layout/LayoutBox.h
index cfc70092..1232d76 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBox.h
+++ b/third_party/WebKit/Source/core/layout/LayoutBox.h
@@ -1446,8 +1446,6 @@
   void ComputeSelfHitTestRects(Vector<LayoutRect>&,
                                const LayoutPoint& layer_offset) const override;
 
-  PaintInvalidationReason DeprecatedInvalidatePaint(
-      const PaintInvalidationState&) override;
   PaintInvalidationReason InvalidatePaint(
       const PaintInvalidatorContext&) const override;
 
diff --git a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
index 1e946466..40a1ad4 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
@@ -361,18 +361,15 @@
     }
   }
 
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-    if ((old_style && old_style->GetPosition() != StyleRef().GetPosition()) ||
-        had_layer != HasLayer()) {
-      // This may affect paint properties of the current object, and descendants
-      // even if paint properties of the current object won't change. E.g. the
-      // stacking context and/or containing block of descendants may change.
-      SetSubtreeNeedsPaintPropertyUpdate();
-    } else if (had_transform_related_property !=
-               HasTransformRelatedProperty()) {
-      // This affects whether to create transform node.
-      SetNeedsPaintPropertyUpdate();
-    }
+  if ((old_style && old_style->GetPosition() != StyleRef().GetPosition()) ||
+      had_layer != HasLayer()) {
+    // This may affect paint properties of the current object, and descendants
+    // even if paint properties of the current object won't change. E.g. the
+    // stacking context and/or containing block of descendants may change.
+    SetSubtreeNeedsPaintPropertyUpdate();
+  } else if (had_transform_related_property != HasTransformRelatedProperty()) {
+    // This affects whether to create transform node.
+    SetNeedsPaintPropertyUpdate();
   }
 
   if (Layer()) {
@@ -554,51 +551,6 @@
   }
 }
 
-DISABLE_CFI_PERF
-void LayoutBoxModelObject::DeprecatedInvalidateTree(
-    const PaintInvalidationState& paint_invalidation_state) {
-  DCHECK(!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
-  EnsureIsReadyForPaintInvalidation();
-
-  PaintInvalidationState new_paint_invalidation_state(paint_invalidation_state,
-                                                      *this);
-  if (!ShouldCheckForPaintInvalidationWithPaintInvalidationState(
-          new_paint_invalidation_state))
-    return;
-
-  if (MayNeedPaintInvalidationSubtree())
-    new_paint_invalidation_state
-        .SetForceSubtreeInvalidationCheckingWithinContainer();
-
-  ObjectPaintInvalidator paint_invalidator(*this);
-  LayoutRect previous_visual_rect = VisualRect();
-  LayoutPoint previous_location = paint_invalidator.LocationInBacking();
-  PaintInvalidationReason reason =
-      DeprecatedInvalidatePaint(new_paint_invalidation_state);
-
-  if (previous_location != paint_invalidator.LocationInBacking()) {
-    new_paint_invalidation_state
-        .SetForceSubtreeInvalidationCheckingWithinContainer();
-  }
-
-  // TODO(wangxianzhu): This is a workaround for crbug.com/490725. We don't have
-  // enough saved information to do accurate check of clipping change. Will
-  // remove when we remove rect-based paint invalidation.
-  if (previous_visual_rect != VisualRect() &&
-      !UsesCompositedScrolling()
-      // Note that isLayoutView() below becomes unnecessary after the launch of
-      // root layer scrolling.
-      && (HasOverflowClip() || IsLayoutView())) {
-    new_paint_invalidation_state
-        .SetForceSubtreeInvalidationRectUpdateWithinContainer();
-  }
-
-  new_paint_invalidation_state.UpdateForChildren(reason);
-  DeprecatedInvalidatePaintOfSubtrees(new_paint_invalidation_state);
-
-  ClearPaintInvalidationFlags();
-}
-
 void LayoutBoxModelObject::AddOutlineRectsForNormalChildren(
     Vector<LayoutRect>& rects,
     const LayoutPoint& additional_offset,
diff --git a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h
index 336fe78f..8b54c72f 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h
+++ b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h
@@ -282,6 +282,11 @@
                              BorderLeft());
   }
 
+  virtual LayoutRectOutsets PaddingOutsets() const {
+    return LayoutRectOutsets(PaddingTop(), PaddingRight(), PaddingBottom(),
+                             PaddingLeft());
+  }
+
   // Insets from the border box to the inside of the border.
   LayoutRectOutsets BorderInsets() const {
     return LayoutRectOutsets(-BorderTop(), -BorderRight(), -BorderBottom(),
@@ -440,8 +445,6 @@
     return false;
   }
 
-  void DeprecatedInvalidateTree(const PaintInvalidationState&) override;
-
   // http://www.w3.org/TR/css3-background/#body-background
   // <html> root element with no background steals background from its first
   // <body> child. The used background for such body element should be the
diff --git a/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.cpp b/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.cpp
index dbe4983..8cbe1e35 100644
--- a/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.cpp
@@ -395,24 +395,6 @@
   embedded_content_view.SetFrameRect(frame_rect);
 }
 
-void LayoutEmbeddedContent::DeprecatedInvalidatePaintOfSubtrees(
-    const PaintInvalidationState& paint_invalidation_state) {
-  LocalFrameView* frame_view = ChildFrameView();
-  if (frame_view && !IsThrottledFrameView()) {
-    // |childFrameView| is in another document, which could be
-    // missing its LayoutView. TODO(jchaffraix): Ideally we should
-    // not need this code.
-    if (LayoutView* child_layout_view = ToLayoutView(
-            LayoutAPIShim::LayoutObjectFrom(frame_view->GetLayoutViewItem()))) {
-      PaintInvalidationState child_view_paint_invalidation_state(
-          paint_invalidation_state, *child_layout_view);
-      frame_view->DeprecatedInvalidateTree(child_view_paint_invalidation_state);
-    }
-  }
-
-  LayoutReplaced::DeprecatedInvalidatePaintOfSubtrees(paint_invalidation_state);
-}
-
 bool LayoutEmbeddedContent::IsThrottledFrameView() const {
   if (LocalFrameView* frame_view = ChildFrameView())
     return frame_view->ShouldThrottleRendering();
diff --git a/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.h b/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.h
index 4a510a5..8fe30ea 100644
--- a/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.h
+++ b/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.h
@@ -76,10 +76,6 @@
   void Paint(const PaintInfo&, const LayoutPoint&) const override;
   CursorDirective GetCursor(const LayoutPoint&, Cursor&) const final;
 
-  // Overridden to invalidate the child frame if any.
-  void DeprecatedInvalidatePaintOfSubtrees(
-      const PaintInvalidationState&) override;
-
  private:
   void UpdateGeometryInternal(EmbeddedContentView&);
   CompositingReasons AdditionalCompositingReasons() const override;
diff --git a/third_party/WebKit/Source/core/layout/LayoutMenuList.cpp b/third_party/WebKit/Source/core/layout/LayoutMenuList.cpp
index 6b6590a..77bd20c 100644
--- a/third_party/WebKit/Source/core/layout/LayoutMenuList.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutMenuList.cpp
@@ -127,8 +127,7 @@
   }
 
   // LayoutMenuList::ControlClipRect() depends on inner_block_->ContentsSize().
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    SetNeedsPaintPropertyUpdate();
+  SetNeedsPaintPropertyUpdate();
 }
 
 HTMLSelectElement* LayoutMenuList::SelectElement() const {
@@ -144,8 +143,7 @@
     cache->ChildrenChanged(this);
 
   // LayoutMenuList::ControlClipRect() depends on inner_block_->ContentsSize().
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    SetNeedsPaintPropertyUpdate();
+  SetNeedsPaintPropertyUpdate();
 }
 
 void LayoutMenuList::RemoveChild(LayoutObject* old_child) {
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
index 870957b..5ac42389 100644
--- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
@@ -71,7 +71,6 @@
 #include "core/layout/LayoutTableRow.h"
 #include "core/layout/LayoutTheme.h"
 #include "core/layout/LayoutView.h"
-#include "core/layout/PaintInvalidationState.h"
 #include "core/layout/api/LayoutAPIShim.h"
 #include "core/layout/api/LayoutEmbeddedContentItem.h"
 #include "core/layout/ng/layout_ng_block_flow.h"
@@ -1130,42 +1129,6 @@
       dirty_rect, display_item_client);
 }
 
-void LayoutObject::DeprecatedInvalidateTree(
-    const PaintInvalidationState& paint_invalidation_state) {
-  DCHECK(!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
-  EnsureIsReadyForPaintInvalidation();
-
-  // If we didn't need paint invalidation then our children don't need as well.
-  // Skip walking down the tree as everything should be fine below us.
-  if (!ShouldCheckForPaintInvalidationWithPaintInvalidationState(
-          paint_invalidation_state))
-    return;
-
-  PaintInvalidationState new_paint_invalidation_state(paint_invalidation_state,
-                                                      *this);
-
-  if (MayNeedPaintInvalidationSubtree()) {
-    new_paint_invalidation_state
-        .SetForceSubtreeInvalidationCheckingWithinContainer();
-  }
-
-  PaintInvalidationReason reason =
-      DeprecatedInvalidatePaint(new_paint_invalidation_state);
-  new_paint_invalidation_state.UpdateForChildren(reason);
-  DeprecatedInvalidatePaintOfSubtrees(new_paint_invalidation_state);
-
-  ClearPaintInvalidationFlags();
-}
-
-DISABLE_CFI_PERF
-void LayoutObject::DeprecatedInvalidatePaintOfSubtrees(
-    const PaintInvalidationState& child_paint_invalidation_state) {
-  DCHECK(!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
-
-  for (auto* child = SlowFirstChild(); child; child = child->NextSibling())
-    child->DeprecatedInvalidateTree(child_paint_invalidation_state);
-}
-
 LayoutRect LayoutObject::SelectionRectInViewCoordinates() const {
   LayoutRect selection_rect = LocalSelectionRect();
   if (!selection_rect.IsEmpty())
@@ -1173,49 +1136,6 @@
   return selection_rect;
 }
 
-PaintInvalidationReason LayoutObject::DeprecatedInvalidatePaint(
-    const PaintInvalidationState& paint_invalidation_state) {
-  DCHECK_EQ(&paint_invalidation_state.CurrentObject(), this);
-
-  if (StyleRef().HasOutline()) {
-    PaintLayer& layer = paint_invalidation_state.PaintingLayer();
-    if (&layer.GetLayoutObject() != this)
-      layer.SetNeedsPaintPhaseDescendantOutlines();
-  }
-
-  LayoutView* v = View();
-  if (v->GetDocument().Printing())
-    return PaintInvalidationReason::kNone;  // Don't invalidate paints if we're
-                                            // printing.
-
-  PaintInvalidatorContextAdapter context(paint_invalidation_state);
-
-  const LayoutBoxModelObject& paint_invalidation_container =
-      paint_invalidation_state.PaintInvalidationContainer();
-  DCHECK(paint_invalidation_container == ContainerForPaintInvalidation());
-
-  ObjectPaintInvalidator paint_invalidator(*this);
-  context.old_visual_rect = VisualRect();
-  context.old_location = paint_invalidator.LocationInBacking();
-  LayoutRect new_visual_rect =
-      paint_invalidation_state.ComputeVisualRectInBacking();
-  context.new_location = paint_invalidation_state.ComputeLocationInBacking(
-      new_visual_rect.Location());
-
-  SetVisualRect(new_visual_rect);
-  paint_invalidator.SetLocationInBacking(context.new_location);
-
-  if (!ShouldCheckForPaintInvalidation() &&
-      paint_invalidation_state
-          .ForcedSubtreeInvalidationRectUpdateWithinContainerOnly()) {
-    // We are done updating the visual rect. No other paint invalidation work
-    // to do for this object.
-    return PaintInvalidationReason::kNone;
-  }
-
-  return InvalidatePaint(context);
-}
-
 DISABLE_CFI_PERF
 PaintInvalidationReason LayoutObject::InvalidatePaint(
     const PaintInvalidatorContext& context) const {
@@ -1741,10 +1661,9 @@
 
   // Text nodes share style with their parents but the paint properties don't
   // apply to them, hence the !isText() check.
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled() && !IsText() &&
-      (diff.TransformChanged() || diff.OpacityChanged() ||
-       diff.ZIndexChanged() || diff.FilterChanged() ||
-       diff.BackdropFilterChanged() || diff.CssClipChanged())) {
+  if (!IsText() && (diff.TransformChanged() || diff.OpacityChanged() ||
+                    diff.ZIndexChanged() || diff.FilterChanged() ||
+                    diff.BackdropFilterChanged() || diff.CssClipChanged())) {
     SetNeedsPaintPropertyUpdate();
 
     // We don't need to invalidate paint of objects on SPv2 when only paint
@@ -1936,7 +1855,7 @@
   if (old_style && old_style->StyleType() == kPseudoIdNone)
     ApplyPseudoStyleChanges(*old_style);
 
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled() && old_style &&
+  if (old_style &&
       old_style->UsedTransformStyle3D() != StyleRef().UsedTransformStyle3D()) {
     // Change of transform-style may affect descendant transform property nodes.
     SetSubtreeNeedsPaintPropertyUpdate();
@@ -3446,12 +3365,6 @@
   GetFrameView()->ScheduleVisualUpdateForPaintInvalidationIfNeeded();
 }
 
-bool LayoutObject::ShouldCheckForPaintInvalidationWithPaintInvalidationState(
-    const PaintInvalidationState& paint_invalidation_state) const {
-  return paint_invalidation_state.HasForcedSubtreeInvalidationFlags() ||
-         ShouldCheckForPaintInvalidation();
-}
-
 void LayoutObject::SetShouldDoFullPaintInvalidation(
     PaintInvalidationReason reason) {
   SetNeedsPaintOffsetAndVisualRectUpdate();
@@ -3563,7 +3476,6 @@
 }
 
 PropertyTreeState LayoutObject::ContentsProperties() const {
-  DCHECK(RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
   return rare_paint_data_->ContentsProperties();
 }
 
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.h b/third_party/WebKit/Source/core/layout/LayoutObject.h
index f1fbd22..68ea703f 100644
--- a/third_party/WebKit/Source/core/layout/LayoutObject.h
+++ b/third_party/WebKit/Source/core/layout/LayoutObject.h
@@ -71,7 +71,6 @@
 class LayoutView;
 class PropertyTreeState;
 class ObjectPaintProperties;
-class PaintInvalidationState;
 class PaintLayer;
 class PseudoStyleRequest;
 
@@ -398,12 +397,10 @@
   // Sets the parent of this object but doesn't add it as a child of the parent.
   void SetDangerousOneWayParent(LayoutObject*);
 
-  // For SlimmingPaintInvalidation/SPv2 only.
   // The ObjectPaintProperties structure holds references to the property tree
   // nodes that are created by the layout object. The property nodes should only
   // be updated during InPrePaint phase of the document lifecycle.
   const ObjectPaintProperties* PaintProperties() const {
-    DCHECK(RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
     return rare_paint_data_ ? rare_paint_data_->PaintProperties() : nullptr;
   }
 
@@ -416,7 +413,6 @@
   // to paint this LayoutObject. See also the comment for
   // RarePaintData::local_border_box_properties_.
   const PropertyTreeState* LocalBorderBoxProperties() const {
-    DCHECK(RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
     if (rare_paint_data_)
       return rare_paint_data_->LocalBorderBoxProperties();
     return nullptr;
@@ -1406,11 +1402,6 @@
   LayoutRect InvalidatePaintRectangle(const LayoutRect&,
                                       DisplayItemClient* = nullptr) const;
 
-  // Walk the tree after layout issuing paint invalidations for layoutObjects
-  // that have changed or moved, updating bounds that have changed, and clearing
-  // paint invalidation state.
-  virtual void DeprecatedInvalidateTree(const PaintInvalidationState&);
-
   void SetShouldDoFullPaintInvalidationIncludingNonCompositingDescendants();
 
   // Returns the rect that should have paint invalidated whenever this object
@@ -1712,9 +1703,6 @@
   }
   void SetShouldInvalidateSelection();
 
-  bool ShouldCheckForPaintInvalidationWithPaintInvalidationState(
-      const PaintInvalidationState&) const;
-
   bool ShouldCheckForPaintInvalidation() const {
     return MayNeedPaintInvalidation() || ShouldDoFullPaintInvalidation();
   }
@@ -1778,7 +1766,6 @@
     // pre-paint tree walk. TODO(wangxianzhu): Add check of lifecycle states.
     void SetVisualRect(const LayoutRect& r) { layout_object_.SetVisualRect(r); }
     void SetPaintOffset(const LayoutPoint& p) {
-      DCHECK(RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
       DCHECK_EQ(layout_object_.GetDocument().Lifecycle().GetState(),
                 DocumentLifecycle::kInPrePaint);
       layout_object_.paint_offset_ = p;
@@ -2091,23 +2078,6 @@
   // Called before paint invalidation.
   virtual void EnsureIsReadyForPaintInvalidation() { DCHECK(!NeedsLayout()); }
 
-  // This function walks the descendants of |this|, following a
-  // layout ordering.
-  //
-  // The ordering is important for PaintInvalidationState, as it requires to be
-  // called following a descendant/container relationship.
-  //
-  // The function is overridden to handle special children (e.g. percentage
-  // height descendants or reflections).
-  virtual void DeprecatedInvalidatePaintOfSubtrees(
-      const PaintInvalidationState& child_paint_invalidation_state);
-
-  // This function generates the invalidation for this object only.
-  // It doesn't recurse into other object, as this is handled by
-  // DeprecatedInvalidatePaintOfSubtrees.
-  virtual PaintInvalidationReason DeprecatedInvalidatePaint(
-      const PaintInvalidationState&);
-
   void SetIsBackgroundAttachmentFixedObject(bool);
 
   void ClearSelfNeedsOverflowRecalcAfterStyleChange() {
@@ -2638,7 +2608,7 @@
   // building. It is relative to the containing transform space. It is the same
   // offset that will be used to paint the object on SPv2. It's used to detect
   // paint offset change for paint invalidation on SPv2, and partial paint
-  // property tree update for SlimmingPaintInvalidation on SPv1 and SPv2.
+  // property tree update on SPv1 and SPv2.
   LayoutPoint paint_offset_;
 
   std::unique_ptr<RarePaintData> rare_paint_data_;
diff --git a/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp b/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp
index 01f24d8..b809285 100644
--- a/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp
@@ -202,7 +202,6 @@
   object->bitfields_.SetDescendantNeedsPaintPropertyUpdate(true);
   EXPECT_TRUE(object->DescendantNeedsPaintPropertyUpdate());
 
-  ScopedSlimmingPaintInvalidationForTest enable_sp_invalidation(true);
   GetDocument().Lifecycle().AdvanceTo(DocumentLifecycle::kInPrePaint);
   object->GetMutableForPainting().ClearPaintFlags();
 
@@ -223,7 +222,6 @@
   EXPECT_TRUE(object->NeedsPaintPropertyUpdate());
   EXPECT_TRUE(object->Parent()->DescendantNeedsPaintPropertyUpdate());
 
-  ScopedSlimmingPaintInvalidationForTest enable_sp_invalidation(true);
   GetDocument().Lifecycle().AdvanceTo(DocumentLifecycle::kInPrePaint);
   object->GetMutableForPainting().ClearPaintFlags();
 
diff --git a/third_party/WebKit/Source/core/layout/LayoutTable.cpp b/third_party/WebKit/Source/core/layout/LayoutTable.cpp
index 7533848..0ce46b1 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTable.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutTable.cpp
@@ -1493,16 +1493,6 @@
   }
 }
 
-PaintInvalidationReason LayoutTable::DeprecatedInvalidatePaint(
-    const PaintInvalidationState& paint_invalidation_state) {
-  if (HasCollapsedBorders()) {
-    paint_invalidation_state.PaintingLayer()
-        .SetNeedsPaintPhaseDescendantBlockBackgrounds();
-  }
-
-  return LayoutBlock::DeprecatedInvalidatePaint(paint_invalidation_state);
-}
-
 PaintInvalidationReason LayoutTable::InvalidatePaint(
     const PaintInvalidatorContext& context) const {
   return TablePaintInvalidator(*this, context).InvalidatePaint();
diff --git a/third_party/WebKit/Source/core/layout/LayoutTable.h b/third_party/WebKit/Source/core/layout/LayoutTable.h
index f7f0035..f6842f0 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTable.h
+++ b/third_party/WebKit/Source/core/layout/LayoutTable.h
@@ -414,8 +414,6 @@
   void SimplifiedNormalFlowLayout() override;
   bool RecalcChildOverflowAfterStyleChange() override;
   void EnsureIsReadyForPaintInvalidation() override;
-  PaintInvalidationReason DeprecatedInvalidatePaint(
-      const PaintInvalidationState&) override;
   PaintInvalidationReason InvalidatePaint(
       const PaintInvalidatorContext&) const override;
   bool PaintedOutputOfObjectHasNoEffectRegardlessOfSize() const override;
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableRow.h b/third_party/WebKit/Source/core/layout/LayoutTableRow.h
index 4e16d69..e6cfb7e 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTableRow.h
+++ b/third_party/WebKit/Source/core/layout/LayoutTableRow.h
@@ -58,8 +58,8 @@
 // for its children. LayoutTableCells are positioned with respect to the
 // enclosing LayoutTableSection (this object's parent()). This particularity is
 // why functions accumulating offset while walking the tree have to special case
-// LayoutTableRow (see e.g. PaintInvalidationState or
-// LayoutBox::positionFromPoint()).
+// LayoutTableRow (see e.g. PaintInvalidatorContext or
+// LayoutBox::PositionFromPoint()).
 //
 // LayoutTableRow is also positioned with respect to the enclosing
 // LayoutTableSection. See LayoutTableSection::layoutRows() for the placement
diff --git a/third_party/WebKit/Source/core/layout/LayoutView.cpp b/third_party/WebKit/Source/core/layout/LayoutView.cpp
index 5fa6714..d82ad0d2 100644
--- a/third_party/WebKit/Source/core/layout/LayoutView.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutView.cpp
@@ -794,6 +794,14 @@
   return frame_view_->GetFrame().PageZoomFactor();
 }
 
+const LayoutBox& LayoutView::RootBox() const {
+  Element* document_element = GetDocument().documentElement();
+  DCHECK(document_element);
+  DCHECK(document_element->GetLayoutObject());
+  DCHECK(document_element->GetLayoutObject()->IsBox());
+  return ToLayoutBox(*document_element->GetLayoutObject());
+}
+
 void LayoutView::UpdateAfterLayout() {
   // Unlike every other layer, the root PaintLayer takes its size from the
   // layout viewport size.  The call to AdjustViewSize() will update the
diff --git a/third_party/WebKit/Source/core/layout/LayoutView.h b/third_party/WebKit/Source/core/layout/LayoutView.h
index 8154f0a..6274a7e 100644
--- a/third_party/WebKit/Source/core/layout/LayoutView.h
+++ b/third_party/WebKit/Source/core/layout/LayoutView.h
@@ -27,7 +27,6 @@
 #include "core/layout/HitTestResult.h"
 #include "core/layout/LayoutBlockFlow.h"
 #include "core/layout/LayoutState.h"
-#include "core/layout/PaintInvalidationState.h"
 #include "platform/PODFreeListArena.h"
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/heap/Handle.h"
@@ -115,6 +114,7 @@
   float ZoomFactor() const;
 
   LocalFrameView* GetFrameView() const { return frame_view_; }
+  const LayoutBox& RootBox() const;
 
   void UpdateAfterLayout() override;
 
diff --git a/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp b/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
deleted file mode 100644
index 3b41e5e..0000000
--- a/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
+++ /dev/null
@@ -1,563 +0,0 @@
-// Copyright 2014 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 "core/layout/PaintInvalidationState.h"
-
-#include "core/frame/LocalFrame.h"
-#include "core/frame/LocalFrameView.h"
-#include "core/frame/Settings.h"
-#include "core/layout/LayoutEmbeddedContent.h"
-#include "core/layout/LayoutInline.h"
-#include "core/layout/LayoutView.h"
-#include "core/layout/api/LayoutAPIShim.h"
-#include "core/layout/api/LayoutEmbeddedContentItem.h"
-#include "core/layout/svg/LayoutSVGRoot.h"
-#include "core/layout/svg/SVGLayoutSupport.h"
-#include "core/paint/PaintInvalidator.h"
-#include "core/paint/PaintLayer.h"
-#include "core/paint/PaintPropertyTreeBuilder.h"
-#include "platform/graphics/paint/GeometryMapper.h"
-
-namespace blink {
-
-static bool SupportsCachedOffsets(const LayoutObject& object) {
-  // Can't compute paint offsets across objects with transforms, but if they are
-  // paint invalidation containers, we don't actually need to compute *across*
-  // the container, just up to it. (Also, such objects are the containing block
-  // for all children.)
-  return !(object.HasTransformRelatedProperty() &&
-           !object.IsPaintInvalidationContainer()) &&
-         !object.HasFilterInducingProperty() && !object.IsLayoutFlowThread() &&
-         !object.IsLayoutMultiColumnSpannerPlaceholder() &&
-         !object.StyleRef().IsFlippedBlocksWritingMode() &&
-         !(object.IsLayoutBlock() && object.IsSVG());
-}
-
-PaintInvalidationState::PaintInvalidationState(
-    const LayoutView& layout_view,
-    Vector<const LayoutObject*>& pending_delayed_paint_invalidations)
-    : current_object_(layout_view),
-      forced_subtree_invalidation_flags_(0),
-      clipped_(false),
-      clipped_for_absolute_position_(false),
-      cached_offsets_enabled_(true),
-      cached_offsets_for_absolute_position_enabled_(true),
-      paint_invalidation_container_(
-          &layout_view.ContainerForPaintInvalidation()),
-      paint_invalidation_container_for_stacked_contents_(
-          paint_invalidation_container_),
-      container_for_absolute_position_(layout_view),
-      pending_delayed_paint_invalidations_(pending_delayed_paint_invalidations),
-      painting_layer_(*layout_view.Layer()) {
-  DCHECK(!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
-
-  if (!SupportsCachedOffsets(layout_view)) {
-    cached_offsets_enabled_ = false;
-    return;
-  }
-
-  FloatPoint point = layout_view.LocalToAncestorPoint(
-      FloatPoint(), paint_invalidation_container_,
-      kTraverseDocumentBoundaries | kInputIsInFrameCoordinates);
-  paint_offset_ = LayoutSize(point.X(), point.Y());
-  paint_offset_for_absolute_position_ = paint_offset_;
-}
-
-PaintInvalidationState::PaintInvalidationState(
-    const PaintInvalidationState& parent_state,
-    const LayoutObject& current_object)
-    : current_object_(current_object),
-      forced_subtree_invalidation_flags_(
-          parent_state.forced_subtree_invalidation_flags_),
-      clipped_(parent_state.clipped_),
-      clipped_for_absolute_position_(
-          parent_state.clipped_for_absolute_position_),
-      clip_rect_(parent_state.clip_rect_),
-      clip_rect_for_absolute_position_(
-          parent_state.clip_rect_for_absolute_position_),
-      paint_offset_(parent_state.paint_offset_),
-      paint_offset_for_absolute_position_(
-          parent_state.paint_offset_for_absolute_position_),
-      cached_offsets_enabled_(parent_state.cached_offsets_enabled_),
-      cached_offsets_for_absolute_position_enabled_(
-          parent_state.cached_offsets_for_absolute_position_enabled_),
-      paint_invalidation_container_(parent_state.paint_invalidation_container_),
-      paint_invalidation_container_for_stacked_contents_(
-          parent_state.paint_invalidation_container_for_stacked_contents_),
-      container_for_absolute_position_(
-          current_object.CanContainAbsolutePositionObjects()
-              ? current_object
-              : parent_state.container_for_absolute_position_),
-      svg_transform_(parent_state.svg_transform_),
-      pending_delayed_paint_invalidations_(
-          parent_state.pending_delayed_paint_invalidations_),
-      painting_layer_(parent_state.ChildPaintingLayer(current_object)) {
-  DCHECK(!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
-  DCHECK_EQ(&painting_layer_, current_object.PaintingLayer());
-
-  if (current_object == parent_state.current_object_) {
-// Sometimes we create a new PaintInvalidationState from parentState on the same
-// object (e.g. LayoutView, and the HorriblySlowRectMapping cases in
-// LayoutBlock::invalidatePaintOfSubtreesIfNeeded()).
-// TODO(wangxianzhu): Avoid this for
-// RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled().
-#if DCHECK_IS_ON()
-    did_update_for_children_ = parent_state.did_update_for_children_;
-#endif
-    return;
-  }
-
-#if DCHECK_IS_ON()
-  DCHECK(parent_state.did_update_for_children_);
-#endif
-
-  if (current_object.IsPaintInvalidationContainer()) {
-    paint_invalidation_container_ = ToLayoutBoxModelObject(&current_object);
-    if (current_object.StyleRef().IsStackingContext())
-      paint_invalidation_container_for_stacked_contents_ =
-          ToLayoutBoxModelObject(&current_object);
-  } else if (current_object.IsLayoutView()) {
-    // m_paintInvalidationContainerForStackedContents is only for stacked
-    // descendants in its own frame, because it doesn't establish stacking
-    // context for stacked contents in sub-frames. Contents stacked in the root
-    // stacking context in this frame should use this frame's
-    // paintInvalidationContainer.
-    paint_invalidation_container_for_stacked_contents_ =
-        paint_invalidation_container_;
-  } else if (current_object.IsFloatingWithNonContainingBlockParent() ||
-             current_object.IsColumnSpanAll()) {
-    // In these cases, the object may belong to an ancestor of the current
-    // paint invalidation container, in paint order.
-    paint_invalidation_container_ =
-        &current_object.ContainerForPaintInvalidation();
-    cached_offsets_enabled_ = false;
-  } else if (current_object.StyleRef().IsStacked() &&
-             // This is to exclude some objects (e.g. LayoutText) inheriting
-             // stacked style from parent but aren't actually stacked.
-             current_object.HasLayer() &&
-             paint_invalidation_container_ !=
-                 paint_invalidation_container_for_stacked_contents_) {
-    // The current object is stacked, so we should use
-    // m_paintInvalidationContainerForStackedContents as its paint invalidation
-    // container on which the current object is painted.
-    paint_invalidation_container_ =
-        paint_invalidation_container_for_stacked_contents_;
-    // We are changing paintInvalidationContainer to
-    // m_paintInvalidationContainerForStackedContents. Must disable cached
-    // offsets because we didn't track paint offset from
-    // m_paintInvalidationContainerForStackedContents.
-    // TODO(wangxianzhu): There are optimization opportunities:
-    // - Like what we do for fixed-position, calculate the paint offset in slow
-    //   path and enable fast path for descendants if possible; or
-    // - Track offset between the two paintInvalidationContainers.
-    cached_offsets_enabled_ = false;
-    if (forced_subtree_invalidation_flags_ &
-        PaintInvalidatorContext::kSubtreeFullInvalidationForStackedContents) {
-      forced_subtree_invalidation_flags_ |=
-          PaintInvalidatorContext::kSubtreeFullInvalidation;
-    }
-  }
-
-  if (!current_object.IsBoxModelObject() && !current_object.IsSVG())
-    return;
-
-  if (cached_offsets_enabled_ ||
-      current_object == paint_invalidation_container_)
-    cached_offsets_enabled_ = SupportsCachedOffsets(current_object);
-
-  if (current_object.IsSVG()) {
-    if (current_object.IsSVGRoot()) {
-      svg_transform_ =
-          ToLayoutSVGRoot(current_object).LocalToBorderBoxTransform();
-      // Don't early return here, because the SVGRoot object needs to execute
-      // the later code as a normal LayoutBox.
-    } else {
-      DCHECK(current_object != paint_invalidation_container_);
-      svg_transform_ *= current_object.LocalToSVGParentTransform();
-      return;
-    }
-  }
-
-  if (current_object == paint_invalidation_container_) {
-    // When we hit a new paint invalidation container, we don't need to
-    // continue forcing a check for paint invalidation, since we're
-    // descending into a different invalidation container. (For instance if
-    // our parents were moved, the entire container will just move.)
-    if (current_object != paint_invalidation_container_for_stacked_contents_) {
-      // However, we need to keep the FullInvalidationForStackedContents flag
-      // if the current object isn't the paint invalidation container of
-      // stacked contents.
-      forced_subtree_invalidation_flags_ &=
-          PaintInvalidatorContext::kSubtreeFullInvalidationForStackedContents;
-    } else {
-      forced_subtree_invalidation_flags_ = 0;
-      if (current_object != container_for_absolute_position_ &&
-          cached_offsets_for_absolute_position_enabled_ &&
-          cached_offsets_enabled_) {
-        // The current object is the new paintInvalidationContainer for
-        // absolute-position descendants but is not their container.
-        // Call updateForCurrentObject() before resetting m_paintOffset to get
-        // paint offset of the current object from the original
-        // paintInvalidationContainerForStackingContents, then use this paint
-        // offset to adjust m_paintOffsetForAbsolutePosition.
-        UpdateForCurrentObject(parent_state);
-        paint_offset_for_absolute_position_ -= paint_offset_;
-        if (clipped_for_absolute_position_)
-          clip_rect_for_absolute_position_.Move(-paint_offset_);
-      }
-    }
-
-    clipped_ = false;  // Will be updated in updateForChildren().
-    paint_offset_ = LayoutSize();
-    return;
-  }
-
-  UpdateForCurrentObject(parent_state);
-}
-
-PaintLayer& PaintInvalidationState::ChildPaintingLayer(
-    const LayoutObject& child) const {
-  if (child.HasLayer() && ToLayoutBoxModelObject(child).HasSelfPaintingLayer())
-    return *ToLayoutBoxModelObject(child).Layer();
-  // See LayoutObject::paintingLayer() for the special-cases of floating under
-  // inline and multicolumn.
-  if (child.IsColumnSpanAll() || child.IsFloatingWithNonContainingBlockParent())
-    return *child.PaintingLayer();
-  return painting_layer_;
-}
-
-void PaintInvalidationState::UpdateForCurrentObject(
-    const PaintInvalidationState& parent_state) {
-  if (!cached_offsets_enabled_)
-    return;
-
-  if (current_object_.IsLayoutView()) {
-    DCHECK_EQ(&parent_state.current_object_,
-              LayoutAPIShim::LayoutObjectFrom(
-                  ToLayoutView(current_object_).GetFrame()->OwnerLayoutItem()));
-    paint_offset_ +=
-        ToLayoutBox(parent_state.current_object_).ContentBoxOffset();
-    // a LayoutView paints with a defined size but a pixel-rounded offset.
-    paint_offset_ = LayoutSize(RoundedIntSize(paint_offset_));
-    return;
-  }
-
-  EPosition position = current_object_.StyleRef().GetPosition();
-
-  if (position == EPosition::kFixed) {
-    // Use slow path to get the offset of the fixed-position, and enable fast
-    // path for descendants.
-    FloatPoint fixed_offset = current_object_.LocalToAncestorPoint(
-        FloatPoint(), paint_invalidation_container_,
-        kTraverseDocumentBoundaries);
-    if (paint_invalidation_container_->IsBox()) {
-      const LayoutBox* box = ToLayoutBox(paint_invalidation_container_);
-      if (box->HasOverflowClip())
-        fixed_offset.Move(box->ScrolledContentOffset());
-    }
-    paint_offset_ = LayoutSize(fixed_offset.X(), fixed_offset.Y());
-    // In the above way to get paint offset, we can't get accurate clip rect, so
-    // just assume no clip. Clip on fixed-position is rare, in case that
-    // paintInvalidationContainer crosses frame boundary and the LayoutView is
-    // clipped by something in owner document.
-    clipped_ = false;
-    return;
-  }
-
-  if (position == EPosition::kAbsolute) {
-    cached_offsets_enabled_ = cached_offsets_for_absolute_position_enabled_;
-    if (!cached_offsets_enabled_)
-      return;
-
-    paint_offset_ = paint_offset_for_absolute_position_;
-    clipped_ = clipped_for_absolute_position_;
-    clip_rect_ = clip_rect_for_absolute_position_;
-
-    // Handle absolute-position block under relative-position inline.
-    const LayoutObject& container =
-        parent_state.container_for_absolute_position_;
-    if (container.IsInFlowPositioned() && container.IsLayoutInline())
-      paint_offset_ +=
-          ToLayoutInline(container).OffsetForInFlowPositionedInline(
-              ToLayoutBox(current_object_));
-  }
-
-  if (current_object_.IsBox())
-    paint_offset_ += ToLayoutBox(current_object_).LocationOffset();
-
-  if (current_object_.IsInFlowPositioned() && current_object_.HasLayer())
-    paint_offset_ += ToLayoutBoxModelObject(current_object_)
-                         .Layer()
-                         ->OffsetForInFlowPosition();
-}
-
-void PaintInvalidationState::UpdateForChildren(PaintInvalidationReason reason) {
-#if DCHECK_IS_ON()
-  DCHECK(!did_update_for_children_);
-  did_update_for_children_ = true;
-#endif
-
-  switch (reason) {
-    case PaintInvalidationReason::kDelayedFull:
-      pending_delayed_paint_invalidations_.push_back(&current_object_);
-      break;
-    case PaintInvalidationReason::kSubtree:
-      forced_subtree_invalidation_flags_ |=
-          (PaintInvalidatorContext::kSubtreeFullInvalidation |
-           PaintInvalidatorContext::kSubtreeFullInvalidationForStackedContents);
-      break;
-    case PaintInvalidationReason::kSVGResource:
-      forced_subtree_invalidation_flags_ |=
-          PaintInvalidatorContext::kSubtreeSVGResourceChange;
-      break;
-    default:
-      break;
-  }
-
-  UpdateForNormalChildren();
-
-  if (current_object_ == container_for_absolute_position_) {
-    if (paint_invalidation_container_ ==
-        paint_invalidation_container_for_stacked_contents_) {
-      cached_offsets_for_absolute_position_enabled_ = cached_offsets_enabled_;
-      if (cached_offsets_enabled_) {
-        paint_offset_for_absolute_position_ = paint_offset_;
-        clipped_for_absolute_position_ = clipped_;
-        clip_rect_for_absolute_position_ = clip_rect_;
-      }
-    } else {
-      // Cached offsets for absolute-position are from
-      // m_paintInvalidationContainer, which can't be used if the
-      // absolute-position descendants will use a different
-      // paintInvalidationContainer.
-      // TODO(wangxianzhu): Same optimization opportunities as under isStacked()
-      // condition in the PaintInvalidationState::PaintInvalidationState(...
-      // LayoutObject&...).
-      cached_offsets_for_absolute_position_enabled_ = false;
-    }
-  }
-}
-
-void PaintInvalidationState::UpdateForNormalChildren() {
-  if (!cached_offsets_enabled_)
-    return;
-
-  if (!current_object_.IsBox())
-    return;
-  const LayoutBox& box = ToLayoutBox(current_object_);
-
-  if (box.IsLayoutView()) {
-    if (!RuntimeEnabledFeatures::RootLayerScrollingEnabled()) {
-      if (box != paint_invalidation_container_) {
-        paint_offset_ -=
-            LayoutSize(ToLayoutView(box).GetFrameView()->GetScrollOffset());
-        AddClipRectRelativeToPaintOffset(ToLayoutView(box).ViewRect());
-      }
-      return;
-    }
-  } else if (box.IsSVGRoot()) {
-    const LayoutSVGRoot& svg_root = ToLayoutSVGRoot(box);
-    if (svg_root.ShouldApplyViewportClip())
-      AddClipRectRelativeToPaintOffset(
-          LayoutRect(LayoutPoint(), LayoutSize(svg_root.PixelSnappedSize())));
-  } else if (box.IsTableRow()) {
-    // Child table cell's locationOffset() includes its row's locationOffset().
-    paint_offset_ -= box.LocationOffset();
-  }
-
-  if (!box.HasClipRelatedProperty())
-    return;
-
-  // Do not clip or scroll for the paint invalidation container, because the
-  // semantics of visual rects do not include clipping or scrolling on that
-  // object.
-  if (box != paint_invalidation_container_) {
-    // This won't work fully correctly for fixed-position elements, who should
-    // receive CSS clip but for whom the current object is not in the containing
-    // block chain.
-    AddClipRectRelativeToPaintOffset(box.ClippingRect());
-    if (box.HasOverflowClip())
-      paint_offset_ -= box.ScrolledContentOffset();
-  }
-
-  // FIXME: <http://bugs.webkit.org/show_bug.cgi?id=13443> Apply control clip if
-  // present.
-}
-
-static FloatPoint SlowLocalToAncestorPoint(const LayoutObject& object,
-                                           const LayoutBoxModelObject& ancestor,
-                                           const FloatPoint& point) {
-  if (object.IsLayoutView())
-    return ToLayoutView(object).LocalToAncestorPoint(
-        point, &ancestor,
-        kTraverseDocumentBoundaries | kInputIsInFrameCoordinates);
-  FloatPoint result = object.LocalToAncestorPoint(point, &ancestor,
-                                                  kTraverseDocumentBoundaries);
-  // Paint invalidation does not include scroll of the ancestor.
-  if (ancestor.IsBox()) {
-    const LayoutBox* box = ToLayoutBox(&ancestor);
-    if (box->HasOverflowClip())
-      result.Move(box->ScrolledContentOffset());
-  }
-  return result;
-}
-
-LayoutPoint PaintInvalidationState::ComputeLocationInBacking(
-    const LayoutPoint& visual_rect_location) const {
-#if DCHECK_IS_ON()
-  DCHECK(!did_update_for_children_);
-#endif
-
-  // Use visual rect location for LayoutTexts because it suffices to check
-  // visual rect change for layout caused invalidation.
-  if (current_object_.IsText())
-    return visual_rect_location;
-
-  FloatPoint point;
-  if (paint_invalidation_container_ != &current_object_) {
-    if (cached_offsets_enabled_) {
-      if (current_object_.IsSVGChild())
-        point = svg_transform_.MapPoint(point);
-      point += FloatPoint(paint_offset_);
-    } else {
-      point = SlowLocalToAncestorPoint(
-          current_object_, *paint_invalidation_container_, FloatPoint());
-    }
-  }
-
-  PaintLayer::MapPointInPaintInvalidationContainerToBacking(
-      *paint_invalidation_container_, point);
-
-  point.Move(current_object_.ScrollAdjustmentForPaintInvalidation(
-      *paint_invalidation_container_));
-
-  return LayoutPoint(point);
-}
-
-LayoutRect PaintInvalidationState::ComputeVisualRectInBacking() const {
-#if DCHECK_IS_ON()
-  DCHECK(!did_update_for_children_);
-#endif
-
-  if (current_object_.IsSVGChild())
-    return ComputeVisualRectInBackingForSVG();
-
-  LayoutRect rect = current_object_.LocalVisualRect();
-  MapLocalRectToVisualRectInBacking(rect);
-  return rect;
-}
-
-LayoutRect PaintInvalidationState::ComputeVisualRectInBackingForSVG() const {
-  LayoutRect rect;
-  if (cached_offsets_enabled_) {
-    FloatRect svg_rect = SVGLayoutSupport::LocalVisualRect(current_object_);
-    rect = SVGLayoutSupport::TransformVisualRect(current_object_,
-                                                 svg_transform_, svg_rect);
-    rect.Move(paint_offset_);
-    if (clipped_)
-      rect.Intersect(clip_rect_);
-  } else {
-    // TODO(wangxianzhu): Sometimes m_cachedOffsetsEnabled==false doesn't mean
-    // we can't use cached m_svgTransform. We can use hybrid fast path (for SVG)
-    // and slow path (for things above the SVGRoot).
-    rect = SVGLayoutSupport::VisualRectInAncestorSpace(
-        current_object_, *paint_invalidation_container_);
-  }
-
-  PaintLayer::MapRectInPaintInvalidationContainerToBacking(
-      *paint_invalidation_container_, rect);
-
-  if (!rect.IsEmpty())
-    rect.Inflate(current_object_.VisualRectOutsetForRasterEffects());
-
-  rect.Move(current_object_.ScrollAdjustmentForPaintInvalidation(
-      *paint_invalidation_container_));
-
-  return rect;
-}
-
-static void SlowMapToVisualRectInAncestorSpace(
-    const LayoutObject& object,
-    const LayoutBoxModelObject& ancestor,
-    LayoutRect& rect) {
-  // TODO(wkorman): The flip below is required because visual rects are
-  // currently in "physical coordinates with flipped block-flow direction"
-  // (see LayoutBoxModelObject.h) but we need them to be in physical
-  // coordinates.
-  if (object.IsBox())
-    ToLayoutBox(&object)->FlipForWritingMode(rect);
-
-  if (object.IsLayoutView()) {
-    ToLayoutView(object).MapToVisualRectInAncestorSpace(
-        &ancestor, rect, kInputIsInFrameCoordinates, kDefaultVisualRectFlags);
-  } else {
-    object.MapToVisualRectInAncestorSpace(&ancestor, rect);
-  }
-}
-
-void PaintInvalidationState::MapLocalRectToPaintInvalidationContainer(
-    LayoutRect& rect) const {
-#if DCHECK_IS_ON()
-  DCHECK(!did_update_for_children_);
-#endif
-
-  if (cached_offsets_enabled_) {
-    rect.Move(paint_offset_);
-    if (clipped_)
-      rect.Intersect(clip_rect_);
-  } else {
-    SlowMapToVisualRectInAncestorSpace(current_object_,
-                                       *paint_invalidation_container_, rect);
-  }
-}
-
-void PaintInvalidationState::MapLocalRectToVisualRectInBacking(
-    LayoutRect& rect) const {
-  MapLocalRectToPaintInvalidationContainer(rect);
-
-  PaintLayer::MapRectInPaintInvalidationContainerToBacking(
-      *paint_invalidation_container_, rect);
-
-  if (!rect.IsEmpty())
-    rect.Inflate(current_object_.VisualRectOutsetForRasterEffects());
-
-  rect.Move(current_object_.ScrollAdjustmentForPaintInvalidation(
-      *paint_invalidation_container_));
-}
-
-void PaintInvalidationState::AddClipRectRelativeToPaintOffset(
-    const LayoutRect& local_clip_rect) {
-  LayoutRect clip_rect = local_clip_rect;
-  clip_rect.Move(paint_offset_);
-  if (clipped_) {
-    clip_rect_.Intersect(clip_rect);
-  } else {
-    clip_rect_ = clip_rect;
-    clipped_ = true;
-  }
-}
-
-PaintLayer& PaintInvalidationState::PaintingLayer() const {
-  DCHECK_EQ(&painting_layer_, current_object_.PaintingLayer());
-  return painting_layer_;
-}
-
-PaintInvalidatorContextAdapter::PaintInvalidatorContextAdapter(
-    const PaintInvalidationState& paint_invalidation_state)
-    : PaintInvalidatorContext(),
-      paint_invalidation_state_(paint_invalidation_state) {
-  subtree_flags = paint_invalidation_state.forced_subtree_invalidation_flags_;
-  paint_invalidation_container =
-      &paint_invalidation_state.PaintInvalidationContainer();
-  painting_layer = &paint_invalidation_state.PaintingLayer();
-}
-
-void PaintInvalidatorContextAdapter::MapLocalRectToVisualRectInBacking(
-    const LayoutObject& object,
-    LayoutRect& rect) const {
-  DCHECK_EQ(&object, &paint_invalidation_state_.CurrentObject());
-  paint_invalidation_state_.MapLocalRectToVisualRectInBacking(rect);
-}
-
-}  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/PaintInvalidationState.h b/third_party/WebKit/Source/core/layout/PaintInvalidationState.h
deleted file mode 100644
index 3a5d025..0000000
--- a/third_party/WebKit/Source/core/layout/PaintInvalidationState.h
+++ /dev/null
@@ -1,194 +0,0 @@
-// Copyright 2014 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 PaintInvalidationState_h
-#define PaintInvalidationState_h
-
-#include "core/CoreExport.h"
-#include "core/paint/PaintInvalidator.h"
-#include "platform/geometry/LayoutRect.h"
-#include "platform/graphics/PaintInvalidationReason.h"
-#include "platform/transforms/AffineTransform.h"
-#include "platform/wtf/Allocator.h"
-#include "platform/wtf/Noncopyable.h"
-
-namespace blink {
-
-class LayoutBoxModelObject;
-class LayoutObject;
-class LayoutView;
-class PaintLayer;
-
-// This is deprecated by PaintInvalidator when SlimmingPaintInvalidation is
-// enabled.
-//
-// PaintInvalidationState is an optimization used during the paint
-// invalidation phase.
-//
-// This class is extremely close to LayoutState so see the documentation
-// of LayoutState for the class existence and performance benefits.
-//
-// The main difference with LayoutState is that it was customized for the
-// needs of the paint invalidation systems (keeping visual rectangles
-// instead of layout specific information).
-//
-// See Source/core/paint/README.md#Paint-invalidation for more details.
-
-class CORE_EXPORT PaintInvalidationState {
-  DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
-  WTF_MAKE_NONCOPYABLE(PaintInvalidationState);
-
- public:
-  PaintInvalidationState(const PaintInvalidationState& parent_state,
-                         const LayoutObject&);
-
-  // For root LayoutView, or when sub-frame LayoutView's
-  // invalidateTreeIfNeeded() is called directly from
-  // FrameView::invalidateTreeIfNeededRecursive() instead of the owner
-  // LayoutEmbeddedContent.
-  // TODO(wangxianzhu): Eliminate the latter case.
-  PaintInvalidationState(
-      const LayoutView&,
-      Vector<const LayoutObject*>& pending_delayed_paint_invalidations);
-
-  // When a PaintInvalidationState is constructed, it can be used to map
-  // points/rects in the object's local space (border box space for
-  // LayoutBoxes). After invalidation of the current object, before invalidation
-  // of the subtrees, this method must be called to apply clip and scroll offset
-  // etc. for creating child PaintInvalidationStates.
-  void UpdateForChildren(PaintInvalidationReason);
-
-  bool HasForcedSubtreeInvalidationFlags() const {
-    return forced_subtree_invalidation_flags_;
-  }
-
-  bool ForcedSubtreeInvalidationCheckingWithinContainer() const {
-    return forced_subtree_invalidation_flags_ &
-           PaintInvalidatorContext::kSubtreeInvalidationChecking;
-  }
-  void SetForceSubtreeInvalidationCheckingWithinContainer() {
-    forced_subtree_invalidation_flags_ |=
-        PaintInvalidatorContext::kSubtreeInvalidationChecking;
-  }
-
-  bool ForcedSubtreeFullInvalidationWithinContainer() const {
-    return forced_subtree_invalidation_flags_ &
-           PaintInvalidatorContext::kSubtreeFullInvalidation;
-  }
-
-  bool ForcedSubtreeInvalidationRectUpdateWithinContainerOnly() const {
-    return forced_subtree_invalidation_flags_ ==
-           PaintInvalidatorContext::kSubtreeVisualRectUpdate;
-  }
-  void SetForceSubtreeInvalidationRectUpdateWithinContainer() {
-    forced_subtree_invalidation_flags_ |=
-        PaintInvalidatorContext::kSubtreeVisualRectUpdate;
-  }
-
-  const LayoutBoxModelObject& PaintInvalidationContainer() const {
-    return *paint_invalidation_container_;
-  }
-
-  // Computes the location of the current object ((0,0) in the space of the
-  // object) in the space of paint invalidation backing.
-  LayoutPoint ComputeLocationInBacking(
-      const LayoutPoint& visual_rect_location) const;
-
-  // Returns the rect bounds needed to invalidate paint of this object,
-  // in the space of paint invalidation backing.
-  LayoutRect ComputeVisualRectInBacking() const;
-
-  void MapLocalRectToVisualRectInBacking(LayoutRect&) const;
-
-  PaintLayer& PaintingLayer() const;
-
-  const LayoutObject& CurrentObject() const { return current_object_; }
-
- private:
-  friend class VisualRectMappingTest;
-  friend class PaintInvalidatorContextAdapter;
-
-  inline PaintLayer& ChildPaintingLayer(const LayoutObject& child) const;
-
-  void MapLocalRectToPaintInvalidationContainer(LayoutRect&) const;
-
-  void UpdateForCurrentObject(const PaintInvalidationState& parent_state);
-  void UpdateForNormalChildren();
-
-  LayoutRect ComputeVisualRectInBackingForSVG() const;
-
-  void AddClipRectRelativeToPaintOffset(const LayoutRect& local_clip_rect);
-
-  const LayoutObject& current_object_;
-
-  unsigned forced_subtree_invalidation_flags_;
-
-  bool clipped_;
-  bool clipped_for_absolute_position_;
-
-  // Clip rect from paintInvalidationContainer if m_cachedOffsetsEnabled is
-  // true.
-  LayoutRect clip_rect_;
-  LayoutRect clip_rect_for_absolute_position_;
-
-  // x/y offset from the paintInvalidationContainer if m_cachedOffsetsEnabled is
-  // true.
-  // It includes relative positioning and scroll offsets.
-  LayoutSize paint_offset_;
-  LayoutSize paint_offset_for_absolute_position_;
-
-  // Whether m_paintOffset[XXX] and m_clipRect[XXX] are valid and can be used
-  // to map a rect from space of the current object to space of
-  // paintInvalidationContainer.
-  bool cached_offsets_enabled_;
-  bool cached_offsets_for_absolute_position_enabled_;
-
-  // The following two fields are never null. Declare them as pointers because
-  // we need some logic to initialize them in the body of the constructor.
-
-  // The current paint invalidation container for normal flow objects.
-  // It is the enclosing composited object.
-  const LayoutBoxModelObject* paint_invalidation_container_;
-
-  // The current paint invalidation container for stacked contents (stacking
-  // contexts or positioned objects).  It is the nearest ancestor composited
-  // object which establishes a stacking context.  See
-  // Source/core/paint/README.md ### PaintInvalidationState for details on how
-  // stacked contents' paint invalidation containers differ.
-  const LayoutBoxModelObject*
-      paint_invalidation_container_for_stacked_contents_;
-
-  const LayoutObject& container_for_absolute_position_;
-
-  // Transform from the initial viewport coordinate system of an outermost
-  // SVG root to the userspace _before_ the relevant element. Combining this
-  // with |m_paintOffset| yields the "final" offset.
-  AffineTransform svg_transform_;
-
-  // Records objects needing paint invalidation on the next frame. See the
-  // definition of PaintInvalidationDelayedFull for more details.
-  Vector<const LayoutObject*>& pending_delayed_paint_invalidations_;
-
-  PaintLayer& painting_layer_;
-
-#if DCHECK_IS_ON()
-  bool did_update_for_children_ = false;
-#endif
-};
-
-// This is temporary to adapt legacy PaintInvalidationState to
-// PaintInvalidatorContext
-class PaintInvalidatorContextAdapter : public PaintInvalidatorContext {
- public:
-  PaintInvalidatorContextAdapter(const PaintInvalidationState&);
-  void MapLocalRectToVisualRectInBacking(const LayoutObject&,
-                                         LayoutRect&) const override;
-
- private:
-  const PaintInvalidationState& paint_invalidation_state_;
-};
-
-}  // namespace blink
-
-#endif  // PaintInvalidationState_h
diff --git a/third_party/WebKit/Source/core/layout/VisualRectMappingTest.cpp b/third_party/WebKit/Source/core/layout/VisualRectMappingTest.cpp
index fa43ddc9..036ebe0 100644
--- a/third_party/WebKit/Source/core/layout/VisualRectMappingTest.cpp
+++ b/third_party/WebKit/Source/core/layout/VisualRectMappingTest.cpp
@@ -4,7 +4,6 @@
 
 #include "core/layout/LayoutTestHelper.h"
 #include "core/layout/LayoutView.h"
-#include "core/layout/PaintInvalidationState.h"
 #include "core/paint/PaintLayer.h"
 #include "core/paint/PaintPropertyTreePrinter.h"
 #include "platform/graphics/paint/GeometryMapper.h"
diff --git a/third_party/WebKit/Source/core/layout/api/LayoutItem.h b/third_party/WebKit/Source/core/layout/api/LayoutItem.h
index 9f7b8a5..f0608fba 100644
--- a/third_party/WebKit/Source/core/layout/api/LayoutItem.h
+++ b/third_party/WebKit/Source/core/layout/api/LayoutItem.h
@@ -203,10 +203,6 @@
     return layout_object_->NeedsOverflowRecalcAfterStyleChange();
   }
 
-  void DeprecatedInvalidateTree(const PaintInvalidationState& state) {
-    layout_object_->DeprecatedInvalidateTree(state);
-  }
-
   CompositingState GetCompositingState() const {
     return layout_object_->GetCompositingState();
   }
diff --git a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
index 18bcc6a..f8c35b1 100644
--- a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
+++ b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
@@ -718,7 +718,7 @@
 
 std::unique_ptr<JSONObject> PaintLayerCompositor::LayerTreeAsJSON(
     LayerTreeFlags flags) const {
-  DCHECK(Lifecycle().GetState() >= DocumentLifecycle::kPaintInvalidationClean ||
+  DCHECK(Lifecycle().GetState() >= DocumentLifecycle::kPrePaintClean ||
          layout_view_.GetFrameView()->ShouldThrottleRendering());
 
   // We skip dumping the scroll and clip layers to keep layerTreeAsText output
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc
index d704839..c1792201 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc
@@ -60,9 +60,6 @@
 
   if (!is_horizontal_writing_mode_)
     baseline_type_ = FontBaseline::kIdeographicBaseline;
-
-  border_and_padding_ = ComputeBorders(ConstraintSpace(), Style()) +
-                        ComputePadding(ConstraintSpace(), Style());
 }
 
 bool NGInlineLayoutAlgorithm::CreateLine(
@@ -410,21 +407,17 @@
 }
 
 RefPtr<NGLayoutResult> NGInlineLayoutAlgorithm::Layout() {
-  // If we are resuming from a break token our start border and padding is
-  // within a previous fragment.
-  content_size_ = BreakToken() ? LayoutUnit() : border_and_padding_.block_start;
+  // Line boxes should start at (0,0).
+  // The parent NGBlockLayoutAlgorithm places the anonymous wrapper using the
+  // border and padding of the container block.
+  content_size_ = LayoutUnit();
 
   NGLineBreaker line_breaker(Node(), constraint_space_, &container_builder_,
                              BreakToken());
   NGLineInfo line_info;
-  while (line_breaker.NextLine(
-      &line_info, {border_and_padding_.inline_start, content_size_}))
+  while (line_breaker.NextLine(&line_info, {LayoutUnit(), content_size_}))
     CreateLine(&line_info, line_breaker.CreateBreakToken());
 
-  // TODO(crbug.com/716930): Avoid calculating border/padding twice.
-  if (!BreakToken())
-    content_size_ -= border_and_padding_.block_start;
-
   // TODO(kojii): Check if the line box width should be content or available.
   NGLogicalSize size(max_inline_size_, content_size_);
   container_builder_.SetSize(size).SetOverflowSize(size);
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.h
index 8140944..1c6d622 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.h
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.h
@@ -78,7 +78,6 @@
   unsigned is_horizontal_writing_mode_ : 1;
 
   NGConstraintSpaceBuilder space_builder_;
-  NGBoxStrut border_and_padding_;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm_test.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm_test.cc
index fe38e80..3779d49 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm_test.cc
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm_test.cc
@@ -79,6 +79,45 @@
   EXPECT_EQ(0u, wrapper2_break_token->ChildBreakTokens().size());
 }
 
+// A block with inline children generates fragment tree as follows:
+// - A box fragment created by NGBlockNode
+//   - A wrapper box fragment created by NGInlineNode
+//     - Line box fragments.
+// This test verifies that borders/paddings are applied to the wrapper box.
+TEST_F(NGInlineLayoutAlgorithmTest, ContainerBorderPadding) {
+  SetBodyInnerHTML(R"HTML(
+    <!DOCTYPE html>
+    <style>
+    html, body { margin: 0; }
+    div {
+      padding-left: 5px;
+      padding-top: 10px;
+    }
+    </style>
+    <div id=container>test</div>
+  )HTML");
+  LayoutNGBlockFlow* block_flow =
+      ToLayoutNGBlockFlow(GetLayoutObjectByElementId("container"));
+  NGBlockNode block_node(block_flow);
+  RefPtr<NGConstraintSpace> space =
+      NGConstraintSpace::CreateFromLayoutObject(*block_flow);
+  RefPtr<NGLayoutResult> layout_result = block_node.Layout(space.Get());
+
+  auto* block_box =
+      ToNGPhysicalBoxFragment(layout_result->PhysicalFragment().Get());
+  EXPECT_TRUE(layout_result->BfcOffset().has_value());
+  EXPECT_EQ(0, layout_result->BfcOffset().value().inline_offset);
+  EXPECT_EQ(0, layout_result->BfcOffset().value().block_offset);
+
+  auto* wrapper = ToNGPhysicalBoxFragment(block_box->Children()[0].Get());
+  EXPECT_EQ(5, wrapper->Offset().left);
+  EXPECT_EQ(10, wrapper->Offset().top);
+
+  auto* line = ToNGPhysicalLineBoxFragment(wrapper->Children()[0].Get());
+  EXPECT_EQ(0, line->Offset().left);
+  EXPECT_EQ(0, line->Offset().top);
+}
+
 // The test leaks memory. crbug.com/721932
 #if defined(ADDRESS_SANITIZER)
 #define MAYBE_VerticalAlignBottomReplaced DISABLED_VerticalAlignBottomReplaced
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc
index 5fa4b4d2..67957ae 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc
@@ -25,6 +25,7 @@
 #include "core/layout/ng/ng_constraint_space_builder.h"
 #include "core/layout/ng/ng_fragment_builder.h"
 #include "core/layout/ng/ng_layout_result.h"
+#include "core/layout/ng/ng_length_utils.h"
 #include "core/layout/ng/ng_physical_box_fragment.h"
 #include "core/style/ComputedStyle.h"
 #include "platform/fonts/shaping/HarfBuzzShaper.h"
@@ -39,6 +40,11 @@
   NGLogicalOffset offset;
   LayoutUnit inline_size;
   NGBorderEdges border_edges;
+
+  void operator+=(const NGBoxStrut& strut) {
+    offset.inline_offset += strut.inline_start;
+    offset.block_offset += strut.block_start;
+  }
 };
 
 // Create BidiRuns from a list of NGPhysicalFragment.
@@ -424,6 +430,9 @@
   Vector<unsigned, 32> text_offsets(items.size());
   GetLayoutTextOffsets(&text_offsets);
 
+  NGBoxStrut border_padding = ComputeBorders(constraint_space, Style()) +
+                              ComputePadding(constraint_space, Style());
+
   FontBaseline baseline_type =
       IsHorizontalWritingMode(constraint_space.WritingMode())
           ? FontBaseline::kAlphabeticBaseline
@@ -448,6 +457,16 @@
     // TODO(kojii): bidi needs to find the logical last run.
     bidi_runs.SetLogicallyLastRun(bidi_runs.LastRun());
 
+    // Add border and padding to all positions.
+    // Line box fragments are relative to this anonymous wrapper box fragment,
+    // and the parent NGBlockLayoutAlgorithm offsets this wrapper by border and
+    // padding, but inline boxes should be placed relative to the
+    // LayoutBlockFlow.
+    for (auto& position : positions_for_bidi_runs)
+      position += border_padding;
+    for (auto& position : positions.Values())
+      position += border_padding;
+
     // Create a RootInlineBox from BidiRunList. InlineBoxes created for the
     // RootInlineBox are set to Bidirun::m_box.
     line_info.SetEmpty(false);
@@ -459,9 +478,10 @@
     PlaceInlineBoxChildren(root_line_box, positions_for_bidi_runs, positions);
 
     // Copy to RootInlineBox.
-    root_line_box->SetLogicalLeft(line_box.InlineOffset());
+    root_line_box->SetLogicalLeft(line_box.InlineOffset() +
+                                  border_padding.inline_start);
     root_line_box->SetLogicalWidth(line_box.InlineSize());
-    LayoutUnit line_top = line_box.BlockOffset();
+    LayoutUnit line_top = line_box.BlockOffset() + border_padding.block_start;
     NGLineHeightMetrics line_metrics(Style(), baseline_type);
     const NGLineHeightMetrics& max_with_leading = physical_line_box->Metrics();
     LayoutUnit baseline = line_top + max_with_leading.ascent;
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGContainer.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGContainer.cpp
index ede7d862..3e7af644 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGContainer.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGContainer.cpp
@@ -155,8 +155,7 @@
       break;
   }
   if (SVGLayoutSupport::WillIsolateBlendingDescendantsForObject(this)) {
-    if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-      SetNeedsPaintPropertyUpdate();
+    SetNeedsPaintPropertyUpdate();
     return;
   }
   if (Parent())
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGInline.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGInline.cpp
index cb727c755..ec5354cc 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGInline.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGInline.cpp
@@ -149,12 +149,4 @@
   LayoutInline::RemoveChild(child);
 }
 
-void LayoutSVGInline::DeprecatedInvalidateTree(
-    const PaintInvalidationState& paint_invalidation_state) {
-  // TODO(wangxianzhu): Verify if the inherited
-  // LayoutBoxModelObject::invalidateTreeIfNeeded() is applicable here.
-  // If yes, remove this overriding method.
-  LayoutObject::DeprecatedInvalidateTree(paint_invalidation_state);
-}
-
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGInline.h b/third_party/WebKit/Source/core/layout/svg/LayoutSVGInline.h
index 3aaf3ecb..6796188 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGInline.h
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGInline.h
@@ -61,8 +61,6 @@
  private:
   InlineFlowBox* CreateInlineFlowBox() final;
 
-  void DeprecatedInvalidateTree(const PaintInvalidationState&) final;
-
   void WillBeDestroyed() final;
   void StyleDidChange(StyleDifference, const ComputedStyle* old_style) final;
 
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMarker.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMarker.cpp
index 9fe50ce..c9dbfe67 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMarker.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMarker.cpp
@@ -136,11 +136,9 @@
 
 void LayoutSVGResourceMarker::SetNeedsTransformUpdate() {
   SetMayNeedPaintInvalidationSubtree();
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-    // The transform paint property relies on the SVG transform being up-to-date
-    // (see: PaintPropertyTreeBuilder::updateTransformForNonRootSVG).
-    SetNeedsPaintPropertyUpdate();
-  }
+  // The transform paint property relies on the SVG transform being up-to-date
+  // (see: PaintPropertyTreeBuilder::updateTransformForNonRootSVG).
+  SetNeedsPaintPropertyUpdate();
   needs_transform_update_ = true;
 }
 
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp
index 2509fd30..ffc1017 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp
@@ -185,8 +185,7 @@
   if (transform_change != SVGTransformChange::kNone ||
       viewport_may_have_changed) {
     SetMayNeedPaintInvalidationSubtree();
-    if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-      SetNeedsPaintPropertyUpdate();
+    SetNeedsPaintPropertyUpdate();
   }
 
   SVGSVGElement* svg = toSVGSVGElement(GetNode());
@@ -313,8 +312,7 @@
       has_non_isolated_blending_descendants_dirty_ = true;
       break;
   }
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    SetNeedsPaintPropertyUpdate();
+  SetNeedsPaintPropertyUpdate();
 }
 
 void LayoutSVGRoot::InsertedIntoTree() {
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGText.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGText.cpp
index e5c80c34..9d19e43b 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGText.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGText.cpp
@@ -409,12 +409,4 @@
   LayoutSVGBlock::RemoveChild(child);
 }
 
-void LayoutSVGText::DeprecatedInvalidateTree(
-    const PaintInvalidationState& paint_invalidation_state) {
-  // TODO(wangxianzhu): Verify if the inherited
-  // LayoutBoxModelObject::invalidateTreeIfNeeded()
-  // is applicable here. If yes, remove this overriding method.
-  LayoutObject::DeprecatedInvalidateTree(paint_invalidation_state);
-}
-
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGText.h b/third_party/WebKit/Source/core/layout/svg/LayoutSVGText.h
index 6043c52..b958cc7 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGText.h
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGText.h
@@ -85,8 +85,6 @@
   void RemoveChild(LayoutObject*) override;
   void WillBeDestroyed() override;
 
-  void DeprecatedInvalidateTree(const PaintInvalidationState&) override;
-
   RootInlineBox* CreateRootInlineBox() override;
 
   void InvalidatePositioningValues(LayoutInvalidationReasonForTracing);
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGTransformableContainer.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGTransformableContainer.cpp
index 66aba48..bbcbc4e 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGTransformableContainer.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGTransformableContainer.cpp
@@ -67,11 +67,9 @@
 
 void LayoutSVGTransformableContainer::SetNeedsTransformUpdate() {
   SetMayNeedPaintInvalidationSubtree();
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-    // The transform paint property relies on the SVG transform being up-to-date
-    // (see: PaintPropertyTreeBuilder::updateTransformForNonRootSVG).
-    SetNeedsPaintPropertyUpdate();
-  }
+  // The transform paint property relies on the SVG transform being up-to-date
+  // (see: PaintPropertyTreeBuilder::updateTransformForNonRootSVG).
+  SetNeedsPaintPropertyUpdate();
   needs_transform_update_ = true;
 }
 
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.cpp
index f8c7da25..626ba86 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.cpp
@@ -58,11 +58,9 @@
 
 void LayoutSVGViewportContainer::SetNeedsTransformUpdate() {
   SetMayNeedPaintInvalidationSubtree();
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-    // The transform paint property relies on the SVG transform being up-to-date
-    // (see: PaintPropertyTreeBuilder::updateTransformForNonRootSVG).
-    SetNeedsPaintPropertyUpdate();
-  }
+  // The transform paint property relies on the SVG transform being up-to-date
+  // (see: PaintPropertyTreeBuilder::updateTransformForNonRootSVG).
+  SetNeedsPaintPropertyUpdate();
   needs_transform_update_ = true;
 }
 
diff --git a/third_party/WebKit/Source/core/page/ChromeClient.h b/third_party/WebKit/Source/core/page/ChromeClient.h
index 42b0028..ecfe6bab5 100644
--- a/third_party/WebKit/Source/core/page/ChromeClient.h
+++ b/third_party/WebKit/Source/core/page/ChromeClient.h
@@ -282,6 +282,8 @@
   virtual void ClosePagePopup(PagePopup*) = 0;
   virtual DOMWindow* PagePopupWindowForTesting() const = 0;
 
+  virtual void SetBrowserControlsState(float height, bool shrinks_layout){};
+
   virtual String AcceptLanguages() = 0;
 
   enum DialogType {
diff --git a/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.cpp b/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.cpp
index ed0ab26..ec28025 100644
--- a/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.cpp
+++ b/third_party/WebKit/Source/core/page/scrolling/TopDocumentRootScrollerController.cpp
@@ -49,10 +49,8 @@
   // paint so we need to do that manually here.
   GlobalRootScroller()->SetNeedsCompositingUpdate();
 
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-    if (GlobalRootScroller()->GetLayoutObject())
-      GlobalRootScroller()->GetLayoutObject()->SetNeedsPaintPropertyUpdate();
-  }
+  if (GlobalRootScroller()->GetLayoutObject())
+    GlobalRootScroller()->GetLayoutObject()->SetNeedsPaintPropertyUpdate();
 }
 
 ScrollableArea* TopDocumentRootScrollerController::RootScrollerArea() const {
diff --git a/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp b/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp
index e8be1a6a..5b7a70d 100644
--- a/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp
+++ b/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp
@@ -411,121 +411,118 @@
   return LayoutSize(width, column_height);
 }
 
-void BackgroundImageGeometry::Calculate(
-    const LayoutBoxModelObject& obj,
-    const LayoutObject* background_object,
-    const LayoutBoxModelObject* paint_container,
-    const GlobalPaintFlags global_paint_flags,
-    const FillLayer& fill_layer,
-    const LayoutRect& paint_rect) {
-  LayoutUnit left;
-  LayoutUnit top;
-  LayoutRect positioning_area;
-  bool is_layout_view = obj.IsLayoutView();
-  const LayoutBox* root_box = nullptr;
-  if (is_layout_view) {
-    // It is only possible reach here when root element has a box.
-    Element* document_element = obj.GetDocument().documentElement();
-    DCHECK(document_element);
-    DCHECK(document_element->GetLayoutObject());
-    DCHECK(document_element->GetLayoutObject()->IsBox());
-    root_box = ToLayoutBox(document_element->GetLayoutObject());
-  }
+namespace {
 
-  bool cell_using_container_background = obj.IsTableCell() &&
-                                         background_object &&
-                                         !background_object->IsTableCell();
-  const LayoutBoxModelObject& positioning_box =
-      is_layout_view ? *root_box
-                     : cell_using_container_background
-                           ? ToLayoutBoxModelObject(*background_object)
-                           : obj;
-  LayoutPoint offset_in_background =
-      cell_using_container_background
-          ? GetOffsetForCell(ToLayoutTableCell(obj),
-                             ToLayoutBox(positioning_box))
-          : LayoutPoint();
-  // Determine the background positioning area and set destRect to the
-  // background painting area.  destRect will be adjusted later if the
-  // background is non-repeating.
-  // FIXME: transforms spec says that fixed backgrounds behave like scroll
-  // inside transforms.
-  bool fixed_attachment = fill_layer.Attachment() == kFixedBackgroundAttachment;
-
+bool ShouldUseFixedAttachment(const FillLayer& fill_layer) {
   if (RuntimeEnabledFeatures::FastMobileScrollingEnabled()) {
     // As a side effect of an optimization to blit on scroll, we do not honor
     // the CSS property "background-attachment: fixed" because it may result in
     // rendering artifacts. Note, these artifacts only appear if we are blitting
     // on scroll of a page that has fixed background images.
-    fixed_attachment = false;
+    return false;
+  }
+  return fill_layer.Attachment() == kFixedBackgroundAttachment;
+}
+
+LayoutRect FixedAttachmentPositioningArea(const LayoutBoxModelObject& obj,
+                                          const LayoutBoxModelObject* container,
+                                          const GlobalPaintFlags flags) {
+  LayoutRect rect = obj.ViewRect();
+  if (FixedBackgroundPaintsInLocalCoordinates(obj, flags)) {
+    rect.SetLocation(LayoutPoint());
+  } else {
+    if (LocalFrameView* frame_view = obj.View()->GetFrameView())
+      rect.SetLocation(IntPoint(frame_view->ScrollOffsetInt()));
+    // Compensate the translations created by ScrollRecorders.
+    // TODO(trchen): Fix this for SP phase 2. crbug.com/529963.
+    rect.MoveBy(AccumulatedScrollOffsetForFixedBackground(obj, container));
   }
 
-  if (!fixed_attachment) {
+  if (container)
+    rect.MoveBy(LayoutPoint(-container->LocalToAbsolute(FloatPoint())));
+
+  return rect;
+}
+
+}  // Anonymous namespace
+
+BackgroundImageGeometry::BackgroundImageGeometry(const LayoutView& view)
+    : box_(view),
+      positioning_box_(view.RootBox()),
+      has_non_local_geometry_(false),
+      cell_using_container_background_(false) {
+  // The background of the box generated by the root element covers the
+  // entire canvas and will be painted by the view object, but the we should
+  // still use the root element box for positioning.
+  positioning_size_override_ = view.RootBox().Size();
+
+  // The input paint rect is specified in root element local coordinate
+  // (i.e. a transform is applied on the context for painting), and is
+  // expanded to cover the whole canvas.  Since left/top is relative to the
+  // paint rect, we need to offset them back.
+  coordinate_offset_by_paint_rect_ = true;
+}
+
+BackgroundImageGeometry::BackgroundImageGeometry(
+    const LayoutBoxModelObject& obj)
+    : box_(obj),
+      positioning_box_(obj),
+      has_non_local_geometry_(false),
+      coordinate_offset_by_paint_rect_(false),
+      cell_using_container_background_(false) {
+  // Specialized constructor should be used for LayoutView.
+  DCHECK(!obj.IsLayoutView());
+}
+
+BackgroundImageGeometry::BackgroundImageGeometry(
+    const LayoutTableCell& cell,
+    const LayoutObject* background_object)
+    : box_(cell),
+      positioning_box_(background_object && !background_object->IsTableCell()
+                           ? ToLayoutBoxModelObject(*background_object)
+                           : cell),
+      has_non_local_geometry_(false),
+      coordinate_offset_by_paint_rect_(false) {
+  cell_using_container_background_ =
+      background_object && !background_object->IsTableCell();
+  if (cell_using_container_background_) {
+    offset_in_background_ =
+        GetOffsetForCell(cell, ToLayoutBox(*background_object));
+    positioning_size_override_ =
+        GetBackgroundObjectDimensions(cell, ToLayoutBox(*background_object));
+  }
+}
+
+void BackgroundImageGeometry::Calculate(const LayoutBoxModelObject* container,
+                                        const GlobalPaintFlags flags,
+                                        const FillLayer& fill_layer,
+                                        const LayoutRect& paint_rect) {
+  LayoutRect positioning_area;
+  LayoutRectOutsets box_outset;
+  if (!ShouldUseFixedAttachment(fill_layer)) {
+    if (coordinate_offset_by_paint_rect_ || cell_using_container_background_)
+      positioning_area.SetSize(positioning_size_override_);
+    else
+      positioning_area = paint_rect;
+    if (fill_layer.Origin() != kBorderFillBox) {
+      box_outset = positioning_box_.BorderBoxOutsets();
+      if (fill_layer.Origin() == kContentFillBox)
+        box_outset += positioning_box_.PaddingOutsets();
+    }
+    positioning_area.Contract(box_outset);
     SetDestRect(paint_rect);
 
-    LayoutUnit right;
-    LayoutUnit bottom;
-    // Scroll and Local.
-    if (fill_layer.Origin() != kBorderFillBox) {
-      left = LayoutUnit(positioning_box.BorderLeft());
-      right = LayoutUnit(positioning_box.BorderRight());
-      top = LayoutUnit(positioning_box.BorderTop());
-      bottom = LayoutUnit(positioning_box.BorderBottom());
-      if (fill_layer.Origin() == kContentFillBox) {
-        left += positioning_box.PaddingLeft();
-        right += positioning_box.PaddingRight();
-        top += positioning_box.PaddingTop();
-        bottom += positioning_box.PaddingBottom();
-      }
-    }
-
-    if (is_layout_view) {
-      // The background of the box generated by the root element covers the
-      // entire canvas and will be painted by the view object, but the we should
-      // still use the root element box for positioning.
-      positioning_area.SetSize(root_box->Size());
-      positioning_area.ContractEdges(top, right, bottom, left);
-
-      // The input paint rect is specified in root element local coordinate
-      // (i.e. a transform is applied on the context for painting), and is
-      // expanded to cover the whole canvas.  Since left/top is relative to the
-      // paint rect, we need to offset them back.
-      left -= paint_rect.X();
-      top -= paint_rect.Y();
-    } else {
-      if (cell_using_container_background) {
-        positioning_area.SetSize(GetBackgroundObjectDimensions(
-            ToLayoutTableCell(obj), ToLayoutBox(positioning_box)));
-      } else {
-        positioning_area = paint_rect;
-      }
-
-      positioning_area.ContractEdges(top, right, bottom, left);
+    if (coordinate_offset_by_paint_rect_) {
+      box_outset.SetLeft(box_outset.Left() - paint_rect.Location().X());
+      box_outset.SetTop(box_outset.Top() - paint_rect.Location().Y());
     }
   } else {
     SetHasNonLocalGeometry();
-
-    LayoutRect viewport_rect = obj.ViewRect();
-    if (FixedBackgroundPaintsInLocalCoordinates(obj, global_paint_flags)) {
-      viewport_rect.SetLocation(LayoutPoint());
-    } else {
-      if (LocalFrameView* frame_view = obj.View()->GetFrameView())
-        viewport_rect.SetLocation(IntPoint(frame_view->ScrollOffsetInt()));
-      // Compensate the translations created by ScrollRecorders.
-      // TODO(trchen): Fix this for SP phase 2. crbug.com/529963.
-      viewport_rect.MoveBy(
-          AccumulatedScrollOffsetForFixedBackground(obj, paint_container));
-    }
-
-    if (paint_container)
-      viewport_rect.MoveBy(
-          LayoutPoint(-paint_container->LocalToAbsolute(FloatPoint())));
-
-    SetDestRect(viewport_rect);
-    positioning_area = viewport_rect;
+    positioning_area = FixedAttachmentPositioningArea(box_, container, flags);
+    SetDestRect(positioning_area);
   }
 
-  LayoutSize fill_tile_size(CalculateFillTileSize(positioning_box, fill_layer,
+  LayoutSize fill_tile_size(CalculateFillTileSize(positioning_box_, fill_layer,
                                                   positioning_area.Size()));
   // It's necessary to apply the heuristic here prior to any further
   // calculations to avoid incorrectly using sub-pixel values that won't be
@@ -549,7 +546,7 @@
 
   LayoutUnit computed_x_position =
       RoundedMinimumValueForLength(fill_layer.XPosition(), available_width) -
-      offset_in_background.X();
+      offset_in_background_.X();
   if (background_repeat_x == kRoundFill &&
       positioning_area_size.Width() > LayoutUnit() &&
       fill_tile_size.Width() > LayoutUnit()) {
@@ -567,17 +564,18 @@
 
     SetTileSize(
         ApplySubPixelHeuristicToImageSize(fill_tile_size, positioning_area));
-    SetPhaseX(TileSize().Width()
-                  ? LayoutUnit(roundf(TileSize().Width() -
-                                      fmodf((computed_x_position + left),
-                                            TileSize().Width())))
-                  : LayoutUnit());
+    SetPhaseX(
+        TileSize().Width()
+            ? LayoutUnit(roundf(TileSize().Width() -
+                                fmodf((computed_x_position + box_outset.Left()),
+                                      TileSize().Width())))
+            : LayoutUnit());
     SetSpaceSize(LayoutSize());
   }
 
   LayoutUnit computed_y_position =
       RoundedMinimumValueForLength(fill_layer.YPosition(), available_height) -
-      offset_in_background.Y();
+      offset_in_background_.Y();
   if (background_repeat_y == kRoundFill &&
       positioning_area_size.Height() > LayoutUnit() &&
       fill_tile_size.Height() > LayoutUnit()) {
@@ -594,23 +592,25 @@
 
     SetTileSize(
         ApplySubPixelHeuristicToImageSize(fill_tile_size, positioning_area));
-    SetPhaseY(TileSize().Height()
-                  ? LayoutUnit(roundf(TileSize().Height() -
-                                      fmodf((computed_y_position + top),
-                                            TileSize().Height())))
-                  : LayoutUnit());
+    SetPhaseY(
+        TileSize().Height()
+            ? LayoutUnit(roundf(TileSize().Height() -
+                                fmodf((computed_y_position + box_outset.Top()),
+                                      TileSize().Height())))
+            : LayoutUnit());
     SetSpaceSize(LayoutSize());
   }
 
   if (background_repeat_x == kRepeatFill) {
     SetRepeatX(fill_layer, fill_tile_size.Width(), available_width,
-               unsnapped_available_width, left, offset_in_background.X());
+               unsnapped_available_width, box_outset.Left(),
+               offset_in_background_.X());
   } else if (background_repeat_x == kSpaceFill &&
              TileSize().Width() > LayoutUnit()) {
     LayoutUnit space = GetSpaceBetweenImageTiles(positioning_area_size.Width(),
                                                  TileSize().Width());
     if (space >= LayoutUnit())
-      SetSpaceX(space, available_width, left);
+      SetSpaceX(space, available_width, box_outset.Left());
     else
       background_repeat_x = kNoRepeatFill;
   }
@@ -618,20 +618,21 @@
     LayoutUnit x_offset = fill_layer.BackgroundXOrigin() == kRightEdge
                               ? available_width - computed_x_position
                               : computed_x_position;
-    SetNoRepeatX(left + x_offset);
-    if (offset_in_background.X() > TileSize().Width())
+    SetNoRepeatX(box_outset.Left() + x_offset);
+    if (offset_in_background_.X() > TileSize().Width())
       SetDestRect(LayoutRect());
   }
 
   if (background_repeat_y == kRepeatFill) {
     SetRepeatY(fill_layer, fill_tile_size.Height(), available_height,
-               unsnapped_available_height, top, offset_in_background.Y());
+               unsnapped_available_height, box_outset.Top(),
+               offset_in_background_.Y());
   } else if (background_repeat_y == kSpaceFill &&
              TileSize().Height() > LayoutUnit()) {
     LayoutUnit space = GetSpaceBetweenImageTiles(positioning_area_size.Height(),
                                                  TileSize().Height());
     if (space >= LayoutUnit())
-      SetSpaceY(space, available_height, top);
+      SetSpaceY(space, available_height, box_outset.Top());
     else
       background_repeat_y = kNoRepeatFill;
   }
@@ -639,12 +640,12 @@
     LayoutUnit y_offset = fill_layer.BackgroundYOrigin() == kBottomEdge
                               ? available_height - computed_y_position
                               : computed_y_position;
-    SetNoRepeatY(top + y_offset);
-    if (offset_in_background.Y() > TileSize().Height())
+    SetNoRepeatY(box_outset.Top() + y_offset);
+    if (offset_in_background_.Y() > TileSize().Height())
       SetDestRect(LayoutRect());
   }
 
-  if (fixed_attachment)
+  if (ShouldUseFixedAttachment(fill_layer))
     UseFixedAttachment(paint_rect.Location());
 
   // Clip the final output rect to the paint rect
@@ -654,4 +655,16 @@
   SetDestRect(LayoutRect(PixelSnappedIntRect(dest_rect_)));
 }
 
+const ImageResourceObserver& BackgroundImageGeometry::ImageClient() const {
+  return box_;
+}
+
+const Document& BackgroundImageGeometry::ImageDocument() const {
+  return box_.GetDocument();
+}
+
+const ComputedStyle& BackgroundImageGeometry::ImageStyle() const {
+  return box_.StyleRef();
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.h b/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.h
index 26774c7..967ec87 100644
--- a/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.h
+++ b/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.h
@@ -19,16 +19,27 @@
 class LayoutObject;
 class LayoutRect;
 class LayoutTableCell;
+class LayoutView;
+class Document;
+class ComputedStyle;
+class ImageResourceObserver;
 
 class BackgroundImageGeometry {
   DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
 
  public:
-  BackgroundImageGeometry() : has_non_local_geometry_(false) {}
+  // Constructor for LayoutView where the coordinate space is different.
+  BackgroundImageGeometry(const LayoutView&);
 
-  void Calculate(const LayoutBoxModelObject&,
-                 const LayoutObject* background_object,
-                 const LayoutBoxModelObject* paint_container,
+  // Constructor for table cells where background_object may be the row or
+  // column the background image is attached to.
+  BackgroundImageGeometry(const LayoutTableCell&,
+                          const LayoutObject* background_object);
+
+  // Generic constructor for all other elements.
+  BackgroundImageGeometry(const LayoutBoxModelObject&);
+
+  void Calculate(const LayoutBoxModelObject* container,
                  const GlobalPaintFlags,
                  const FillLayer&,
                  const LayoutRect& paint_rect);
@@ -53,6 +64,15 @@
   // Has background-attachment: fixed. Implies that we can't always cheaply
   // compute destRect.
   bool HasNonLocalGeometry() const { return has_non_local_geometry_; }
+  // Whether the background needs to be positioned relative to a container
+  // element. Only used for tables.
+  bool CellUsingContainerBackground() const {
+    return cell_using_container_background_;
+  }
+
+  const ImageResourceObserver& ImageClient() const;
+  const Document& ImageDocument() const;
+  const ComputedStyle& ImageStyle() const;
 
  private:
   void SetDestRect(const LayoutRect& dest_rect) { dest_rect_ = dest_rect; }
@@ -87,12 +107,19 @@
   LayoutSize GetBackgroundObjectDimensions(const LayoutTableCell&,
                                            const LayoutBox&);
 
+  const LayoutBoxModelObject& box_;
+  const LayoutBoxModelObject& positioning_box_;
+  LayoutSize positioning_size_override_;
+  LayoutPoint offset_in_background_;
+
   // TODO(schenney): Convert these to IntPoints for values that we snap
   LayoutRect dest_rect_;
   LayoutPoint phase_;
   LayoutSize tile_size_;
   LayoutSize repeat_spacing_;
   bool has_non_local_geometry_;
+  bool coordinate_offset_by_paint_rect_;
+  bool cell_using_container_background_;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp b/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
index 2e1c804..823fd72a 100644
--- a/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
+++ b/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
@@ -8,6 +8,7 @@
 #include "core/frame/LocalFrameView.h"
 #include "core/layout/LayoutTestHelper.h"
 #include "core/layout/LayoutView.h"
+#include "core/paint/PaintInvalidator.h"
 #include "core/paint/PaintLayer.h"
 #include "platform/graphics/GraphicsLayer.h"
 #include "platform/graphics/paint/RasterInvalidationTracking.h"
@@ -292,9 +293,6 @@
 }
 
 TEST_P(BoxPaintInvalidatorTest, SubpixelVisualRectChagne) {
-  ScopedSlimmingPaintInvalidationForTest scoped_slimming_paint_invalidation(
-      true);
-
   Element* target = GetDocument().getElementById("target");
 
   GetDocument().View()->SetTracksPaintInvalidations(true);
@@ -326,9 +324,6 @@
 }
 
 TEST_P(BoxPaintInvalidatorTest, SubpixelVisualRectChangeWithTransform) {
-  ScopedSlimmingPaintInvalidationForTest scoped_slimming_paint_invalidation(
-      true);
-
   Element* target = GetDocument().getElementById("target");
   target->setAttribute(HTMLNames::classAttr, "border transform");
   GetDocument().View()->UpdateAllLifecyclePhases();
@@ -362,9 +357,6 @@
 }
 
 TEST_P(BoxPaintInvalidatorTest, SubpixelWithinPixelsChange) {
-  ScopedSlimmingPaintInvalidationForTest scoped_slimming_paint_invalidation(
-      true);
-
   Element* target = GetDocument().getElementById("target");
   LayoutObject* target_object = target->GetLayoutObject();
   EXPECT_EQ(LayoutRect(0, 0, 70, 140), target_object->VisualRect());
@@ -403,9 +395,6 @@
 }
 
 TEST_P(BoxPaintInvalidatorTest, ResizeRotated) {
-  ScopedSlimmingPaintInvalidationForTest scoped_slimming_paint_invalidation(
-      true);
-
   Element* target = GetDocument().getElementById("target");
   target->setAttribute(HTMLNames::styleAttr, "transform: rotate(45deg)");
   GetDocument().View()->UpdateAllLifecyclePhases();
@@ -425,9 +414,6 @@
 }
 
 TEST_P(BoxPaintInvalidatorTest, ResizeRotatedChild) {
-  ScopedSlimmingPaintInvalidationForTest scoped_slimming_paint_invalidation(
-      true);
-
   Element* target = GetDocument().getElementById("target");
   target->setAttribute(HTMLNames::styleAttr,
                        "transform: rotate(45deg); width: 200px");
diff --git a/third_party/WebKit/Source/core/paint/BoxPainter.cpp b/third_party/WebKit/Source/core/paint/BoxPainter.cpp
index 99267dd..53010898 100644
--- a/third_party/WebKit/Source/core/paint/BoxPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/BoxPainter.cpp
@@ -210,8 +210,9 @@
     return;
   if (layout_box_.BackgroundIsKnownToBeObscured())
     return;
+  BackgroundImageGeometry geometry(layout_box_);
   PaintFillLayers(paint_info, background_color,
-                  layout_box_.Style()->BackgroundLayers(), paint_rect,
+                  layout_box_.Style()->BackgroundLayers(), paint_rect, geometry,
                   bleed_avoidance);
 }
 
@@ -219,9 +220,9 @@
                                  const Color& c,
                                  const FillLayer& fill_layer,
                                  const LayoutRect& rect,
+                                 BackgroundImageGeometry& geometry,
                                  BackgroundBleedAvoidance bleed_avoidance,
-                                 SkBlendMode op,
-                                 const LayoutObject* background_object) {
+                                 SkBlendMode op) {
   FillLayerOcclusionOutputList reversed_paint_list;
   bool should_draw_background_in_separate_buffer =
       CalculateFillLayerOcclusionCulling(reversed_paint_list, fill_layer,
@@ -231,16 +232,15 @@
   // TODO(trchen): We can optimize out isolation group if we have a
   // non-transparent background color and the bottom layer encloses all other
   // layers.
-
   GraphicsContext& context = paint_info.context;
-
   if (should_draw_background_in_separate_buffer)
     context.BeginLayer();
 
   for (auto it = reversed_paint_list.rbegin(); it != reversed_paint_list.rend();
-       ++it)
-    PaintFillLayer(layout_box_, paint_info, c, **it, rect, bleed_avoidance, 0,
-                   LayoutSize(), op, background_object);
+       ++it) {
+    PaintFillLayer(layout_box_, paint_info, c, **it, rect, bleed_avoidance,
+                   geometry, 0, LayoutSize(), op);
+  }
 
   if (should_draw_background_in_separate_buffer)
     context.EndLayer();
@@ -248,10 +248,7 @@
 
 namespace {
 
-// RAII image paint helper.
 class ImagePaintContext {
-  STACK_ALLOCATED();
-
  public:
   ImagePaintContext(const ImageResourceObserver& image_client,
                     const Document& document,
@@ -305,19 +302,15 @@
 inline bool PaintFastBottomLayer(const LayoutBoxModelObject& obj,
                                  const PaintInfo& paint_info,
                                  const BoxPainterBase::FillLayerInfo& info,
-                                 const FillLayer& layer,
                                  const LayoutRect& rect,
                                  BackgroundBleedAvoidance bleed_avoidance,
-                                 bool has_line_box_sibling,
                                  const LayoutSize& box_size,
                                  SkBlendMode op,
-                                 const LayoutObject* background_object,
-                                 double frame_time,
-                                 const Settings* settings,
-                                 Optional<BackgroundImageGeometry>& geometry) {
+                                 BackgroundImageGeometry& geometry,
+                                 Optional<ImagePaintContext>& image_context,
+                                 bool has_line_box_sibling) {
   // Painting a background image from an ancestor onto a cell is a complex case.
-  if (obj.IsTableCell() && background_object &&
-      !background_object->IsTableCell())
+  if (geometry.CellUsingContainerBackground())
     return false;
   // Complex cases not handled on the fast path.
   if (!info.is_bottom_layer || !info.is_border_fill ||
@@ -336,21 +329,16 @@
     if (info.is_rounded_fill && paint_info.IsPrinting())
       return false;
 
-    DCHECK(!geometry);
-    geometry.emplace();
-    geometry->Calculate(obj, background_object, paint_info.PaintContainer(),
-                        paint_info.GetGlobalPaintFlags(), layer, rect);
-
-    if (!geometry->DestRect().IsEmpty()) {
+    if (!geometry.DestRect().IsEmpty()) {
       // The tile is too small.
-      if (geometry->TileSize().Width() < rect.Width() ||
-          geometry->TileSize().Height() < rect.Height())
+      if (geometry.TileSize().Width() < rect.Width() ||
+          geometry.TileSize().Height() < rect.Height())
         return false;
 
       image_tile = Image::ComputeTileContaining(
-          FloatPoint(geometry->DestRect().Location()),
-          FloatSize(geometry->TileSize()), FloatPoint(geometry->Phase()),
-          FloatSize(geometry->SpaceSize()));
+          FloatPoint(geometry.DestRect().Location()),
+          FloatSize(geometry.TileSize()), FloatPoint(geometry.Phase()),
+          FloatSize(geometry.SpaceSize()));
 
       // The tile is misaligned.
       if (!image_tile.Contains(FloatRect(rect)))
@@ -386,26 +374,20 @@
   if (!info.should_paint_image || image_tile.IsEmpty())
     return true;
 
-  const LayoutObject& image_client =
-      background_object ? *background_object : obj;
-  const ImagePaintContext image_context(
-      image_client, image_client.GetDocument(), image_client.StyleRef(),
-      context, layer, *info.image, op, geometry->TileSize(), frame_time,
-      settings);
-  if (!image_context.GetImage())
+  if (!image_context || !image_context->GetImage())
     return true;
 
   const FloatSize intrinsic_tile_size =
-      image_context.GetImage()->HasRelativeSize()
+      image_context->GetImage()->HasRelativeSize()
           ? image_tile.Size()
-          : FloatSize(image_context.GetImage()->Size());
+          : FloatSize(image_context->GetImage()->Size());
   const FloatRect src_rect = Image::ComputeSubsetForTile(
       image_tile, border.Rect(), intrinsic_tile_size);
 
   TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "PaintImage",
                "data", InspectorPaintImageEvent::Data(obj, *info.image));
-  context.DrawImageRRect(image_context.GetImage(), border, src_rect,
-                         image_context.CompositeOp());
+  context.DrawImageRRect(image_context->GetImage(), border, src_rect,
+                         image_context->CompositeOp());
 
   return true;
 }
@@ -418,10 +400,10 @@
                                 const FillLayer& bg_layer,
                                 const LayoutRect& rect,
                                 BackgroundBleedAvoidance bleed_avoidance,
+                                BackgroundImageGeometry& geometry,
                                 const InlineFlowBox* box,
                                 const LayoutSize& box_size,
-                                SkBlendMode op,
-                                const LayoutObject* background_object) {
+                                SkBlendMode op) {
   GraphicsContext& context = paint_info.context;
   if (rect.IsEmpty())
     return;
@@ -431,27 +413,11 @@
       bleed_avoidance, (box ? box->IncludeLogicalLeftEdge() : true),
       (box ? box->IncludeLogicalRightEdge() : true));
 
-  Optional<BackgroundImageGeometry> geometry;
   bool has_line_box_sibling = box && (box->NextLineBox() || box->PrevLineBox());
   const Page* page = obj.GetDocument().GetPage();
   double frame_time = page->GetChromeClient().LastFrameTimeMonotonic();
   const Settings* settings = obj.GetDocument().GetSettings();
 
-  // Fast path for drawing simple color backgrounds.
-  if (PaintFastBottomLayer(obj, paint_info, info, bg_layer, rect,
-                           bleed_avoidance, has_line_box_sibling, box_size, op,
-                           background_object, frame_time, settings, geometry)) {
-    return;
-  }
-
-  Optional<RoundedInnerRectClipper> clip_to_border;
-  if (info.is_rounded_fill) {
-    FloatRoundedRect border = RoundedBorderRectForClip(
-        obj.StyleRef(), info, bg_layer, rect, bleed_avoidance,
-        has_line_box_sibling, box_size, obj.BorderPaddingInsets());
-    clip_to_border.emplace(obj, paint_info, rect, border, kApplyToContext);
-  }
-
   LayoutRectOutsets border(
       obj.BorderTop(),
       info.include_right_edge ? obj.BorderRight() : LayoutUnit(),
@@ -480,6 +446,31 @@
                                   this_box.BorderBottom());
   }
 
+  Optional<ImagePaintContext> image_context;
+  if (info.should_paint_image) {
+    geometry.Calculate(paint_info.PaintContainer(),
+                       paint_info.GetGlobalPaintFlags(), bg_layer,
+                       scrolled_paint_rect);
+    image_context.emplace(geometry.ImageClient(), geometry.ImageDocument(),
+                          geometry.ImageStyle(), context, bg_layer, *info.image,
+                          op, geometry.TileSize(), frame_time, settings);
+  }
+
+  // Fast path for drawing simple color backgrounds.
+  if (PaintFastBottomLayer(obj, paint_info, info, rect, bleed_avoidance,
+                           box_size, op, geometry, image_context,
+                           has_line_box_sibling)) {
+    return;
+  }
+
+  Optional<RoundedInnerRectClipper> clip_to_border;
+  if (info.is_rounded_fill) {
+    FloatRoundedRect border = RoundedBorderRectForClip(
+        obj.StyleRef(), info, bg_layer, rect, bleed_avoidance,
+        has_line_box_sibling, box_size, obj.BorderPaddingInsets());
+    clip_to_border.emplace(obj, paint_info, rect, border, kApplyToContext);
+  }
+
   GraphicsContextStateSaver background_clip_state_saver(context, false);
   IntRect mask_rect;
 
@@ -538,32 +529,13 @@
   }
 
   // no progressive loading of the background image
-  if (info.should_paint_image) {
-    if (!geometry) {
-      geometry.emplace();
-      geometry->Calculate(obj, background_object, paint_info.PaintContainer(),
-                          paint_info.GetGlobalPaintFlags(), bg_layer,
-                          scrolled_paint_rect);
-    } else {
-      // The geometry was calculated in paintFastBottomLayer().
-      DCHECK(info.is_bottom_layer && info.is_border_fill &&
-             !info.is_clipped_with_local_scrolling);
-    }
-
-    if (!geometry->DestRect().IsEmpty()) {
-      const LayoutObject& image_client =
-          background_object ? *background_object : obj;
-      const ImagePaintContext image_context(
-          image_client, image_client.GetDocument(), image_client.StyleRef(),
-          context, bg_layer, *info.image, op, geometry->TileSize(), frame_time,
-          settings);
-      TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "PaintImage",
-                   "data", InspectorPaintImageEvent::Data(obj, *info.image));
-      context.DrawTiledImage(
-          image_context.GetImage(), FloatRect(geometry->DestRect()),
-          FloatPoint(geometry->Phase()), FloatSize(geometry->TileSize()),
-          image_context.CompositeOp(), FloatSize(geometry->SpaceSize()));
-    }
+  if (info.should_paint_image && !geometry.DestRect().IsEmpty()) {
+    TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "PaintImage",
+                 "data", InspectorPaintImageEvent::Data(obj, *info.image));
+    context.DrawTiledImage(
+        image_context->GetImage(), FloatRect(geometry.DestRect()),
+        FloatPoint(geometry.Phase()), FloatSize(geometry.TileSize()),
+        image_context->CompositeOp(), FloatSize(geometry.SpaceSize()));
   }
 
   if (bg_layer.Clip() == kTextFillBox) {
@@ -641,8 +613,9 @@
   }
 
   if (all_mask_images_loaded) {
+    BackgroundImageGeometry geometry(layout_box_);
     PaintFillLayers(paint_info, Color::kTransparent,
-                    layout_box_.Style()->MaskLayers(), paint_rect);
+                    layout_box_.Style()->MaskLayers(), paint_rect, geometry);
     NinePieceImagePainter::Paint(paint_info.context, layout_box_,
                                  layout_box_.GetDocument(), GetNode(),
                                  paint_rect, layout_box_.StyleRef(),
diff --git a/third_party/WebKit/Source/core/paint/BoxPainter.h b/third_party/WebKit/Source/core/paint/BoxPainter.h
index 4f118d5..eb82e04 100644
--- a/third_party/WebKit/Source/core/paint/BoxPainter.h
+++ b/third_party/WebKit/Source/core/paint/BoxPainter.h
@@ -20,8 +20,8 @@
 class LayoutRect;
 struct PaintInfo;
 class LayoutBox;
-class LayoutObject;
 class LayoutBoxModelObject;
+class BackgroundImageGeometry;
 
 class BoxPainter : public BoxPainterBase {
   STACK_ALLOCATED();
@@ -39,9 +39,9 @@
                        const Color&,
                        const FillLayer&,
                        const LayoutRect&,
+                       BackgroundImageGeometry&,
                        BackgroundBleedAvoidance = kBackgroundBleedNone,
-                       SkBlendMode = SkBlendMode::kSrcOver,
-                       const LayoutObject* background_object = nullptr);
+                       SkBlendMode = SkBlendMode::kSrcOver);
   void PaintMaskImages(const PaintInfo&, const LayoutRect&);
   void PaintBoxDecorationBackgroundWithRect(const PaintInfo&,
                                             const LayoutPoint&,
@@ -52,10 +52,10 @@
                              const FillLayer&,
                              const LayoutRect&,
                              BackgroundBleedAvoidance,
+                             BackgroundImageGeometry&,
                              const InlineFlowBox* = nullptr,
                              const LayoutSize& = LayoutSize(),
-                             SkBlendMode = SkBlendMode::kSrcOver,
-                             const LayoutObject* background_object = nullptr);
+                             SkBlendMode = SkBlendMode::kSrcOver);
   LayoutRect BoundsForDrawingRecorder(const PaintInfo&,
                                       const LayoutPoint& adjusted_paint_offset);
 
diff --git a/third_party/WebKit/Source/core/paint/FieldsetPainter.cpp b/third_party/WebKit/Source/core/paint/FieldsetPainter.cpp
index 35d8a64d..cc07807 100644
--- a/third_party/WebKit/Source/core/paint/FieldsetPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/FieldsetPainter.cpp
@@ -5,6 +5,7 @@
 #include "core/paint/FieldsetPainter.h"
 
 #include "core/layout/LayoutFieldset.h"
+#include "core/paint/BackgroundImageGeometry.h"
 #include "core/paint/BoxDecorationData.h"
 #include "core/paint/BoxPainter.h"
 #include "core/paint/LayoutObjectDrawingRecorder.h"
@@ -51,10 +52,11 @@
 
   BoxPainter::PaintNormalBoxShadow(paint_info, paint_rect,
                                    layout_fieldset_.StyleRef());
+  BackgroundImageGeometry geometry(layout_fieldset_);
   BoxPainter(layout_fieldset_)
       .PaintFillLayers(paint_info, box_decoration_data.background_color,
-                       layout_fieldset_.Style()->BackgroundLayers(),
-                       paint_rect);
+                       layout_fieldset_.Style()->BackgroundLayers(), paint_rect,
+                       geometry);
   BoxPainter::PaintInsetBoxShadow(paint_info, paint_rect,
                                   layout_fieldset_.StyleRef());
 
diff --git a/third_party/WebKit/Source/core/paint/FindPaintOffsetAndVisualRectNeedingUpdate.h b/third_party/WebKit/Source/core/paint/FindPaintOffsetAndVisualRectNeedingUpdate.h
index f8b1537..7cacf30 100644
--- a/third_party/WebKit/Source/core/paint/FindPaintOffsetAndVisualRectNeedingUpdate.h
+++ b/third_party/WebKit/Source/core/paint/FindPaintOffsetAndVisualRectNeedingUpdate.h
@@ -68,8 +68,7 @@
         old_visual_rect_(old_visual_rect),
         needed_visual_rect_update_(context.NeedsVisualRectUpdate(object)) {
     if (needed_visual_rect_update_) {
-      DCHECK(!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled() ||
-             is_actually_needed);
+      DCHECK(is_actually_needed);
       return;
     }
     context.force_visual_rect_update_for_checking_ = true;
diff --git a/third_party/WebKit/Source/core/paint/FragmentData.h b/third_party/WebKit/Source/core/paint/FragmentData.h
index 0ac7bfb..2fc4df1 100644
--- a/third_party/WebKit/Source/core/paint/FragmentData.h
+++ b/third_party/WebKit/Source/core/paint/FragmentData.h
@@ -30,7 +30,6 @@
   void ClearPaintProperties();
 
   ClipRects* PreviousClipRects() const {
-    DCHECK(RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
     return previous_clip_rects_.Get();
   }
   void SetPreviousClipRects(ClipRects& clip_rects) {
diff --git a/third_party/WebKit/Source/core/paint/InlineFlowBoxPainter.cpp b/third_party/WebKit/Source/core/paint/InlineFlowBoxPainter.cpp
index ee8d417..8c3e80bda 100644
--- a/third_party/WebKit/Source/core/paint/InlineFlowBoxPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/InlineFlowBoxPainter.cpp
@@ -6,6 +6,7 @@
 
 #include "core/layout/api/LineLayoutAPIShim.h"
 #include "core/layout/line/RootInlineBox.h"
+#include "core/paint/BackgroundImageGeometry.h"
 #include "core/paint/BoxPainter.h"
 #include "core/paint/NinePieceImagePainter.h"
 #include "core/paint/PaintInfo.h"
@@ -77,6 +78,7 @@
                                           SkBlendMode op) {
   LayoutBoxModelObject* box_model = ToLayoutBoxModelObject(
       LineLayoutAPIShim::LayoutObjectFrom(inline_flow_box_.BoxModelObject()));
+  BackgroundImageGeometry geometry(*box_model);
   StyleImage* img = fill_layer.GetImage();
   bool has_fill_image = img && img->CanRender();
   if ((!has_fill_image &&
@@ -84,16 +86,16 @@
       (!inline_flow_box_.PrevLineBox() && !inline_flow_box_.NextLineBox()) ||
       !inline_flow_box_.Parent()) {
     BoxPainter::PaintFillLayer(*box_model, paint_info, c, fill_layer, rect,
-                               kBackgroundBleedNone, &inline_flow_box_,
-                               rect.Size(), op);
+                               kBackgroundBleedNone, geometry,
+                               &inline_flow_box_, rect.Size(), op);
   } else if (inline_flow_box_.GetLineLayoutItem()
                  .Style()
                  ->BoxDecorationBreak() == EBoxDecorationBreak::kClone) {
     GraphicsContextStateSaver state_saver(paint_info.context);
     paint_info.context.Clip(PixelSnappedIntRect(rect));
     BoxPainter::PaintFillLayer(*box_model, paint_info, c, fill_layer, rect,
-                               kBackgroundBleedNone, &inline_flow_box_,
-                               rect.Size(), op);
+                               kBackgroundBleedNone, geometry,
+                               &inline_flow_box_, rect.Size(), op);
   } else {
     // We have a fill image that spans multiple lines.
     // FIXME: frameSize ought to be the same as rect.size().
@@ -106,7 +108,7 @@
     paint_info.context.Clip(PixelSnappedIntRect(rect));
     BoxPainter::PaintFillLayer(*box_model, paint_info, c, fill_layer,
                                image_strip_paint_rect, kBackgroundBleedNone,
-                               &inline_flow_box_, rect.Size(), op);
+                               geometry, &inline_flow_box_, rect.Size(), op);
   }
 }
 
diff --git a/third_party/WebKit/Source/core/paint/ObjectPaintInvalidator.cpp b/third_party/WebKit/Source/core/paint/ObjectPaintInvalidator.cpp
index 00e93e8..4a46694f 100644
--- a/third_party/WebKit/Source/core/paint/ObjectPaintInvalidator.cpp
+++ b/third_party/WebKit/Source/core/paint/ObjectPaintInvalidator.cpp
@@ -355,9 +355,7 @@
 
   DCHECK(g_disable_paint_invalidation_state_asserts ||
          object_.GetDocument().Lifecycle().GetState() ==
-             (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()
-                  ? DocumentLifecycle::kInPrePaint
-                  : DocumentLifecycle::kInPaintInvalidation));
+             DocumentLifecycle::kInPrePaint);
 
   if (dirty_rect.IsEmpty())
     return;
diff --git a/third_party/WebKit/Source/core/paint/ObjectPainter.h b/third_party/WebKit/Source/core/paint/ObjectPainter.h
index 6de14d1..8f808c8 100644
--- a/third_party/WebKit/Source/core/paint/ObjectPainter.h
+++ b/third_party/WebKit/Source/core/paint/ObjectPainter.h
@@ -60,16 +60,14 @@
   void PaintAllPhasesAtomically(const PaintInfo&,
                                 const LayoutPoint& paint_offset);
 
-  // When SlimmingPaintInvalidation is enabled, we compute paint offsets during
-  // the pre-paint tree walk (PrePaintTreeWalk). This check verifies that the
-  // paint offset computed during pre-paint matches the actual paint offset
-  // during paint.
+  // We compute paint offsets during the pre-paint tree walk (PrePaintTreeWalk).
+  // This check verifies that the paint offset computed during pre-paint matches
+  // the actual paint offset during paint.
   void CheckPaintOffset(const PaintInfo& paint_info,
                         const LayoutPoint& paint_offset) {
 #if DCHECK_IS_ON()
-    // For now this works for SPv2 (implying SlimmingPaintInvalidation) only,
-    // but not SlimmingPaintInvalidation on SPv1 because of complexities of
-    // paint invalidation containers in SPv1.
+    // For now this works for SPv2 only because of complexities of paint
+    // invalidation containers in SPv1.
     if (RuntimeEnabledFeatures::SlimmingPaintV2Enabled())
       DoCheckPaintOffset(paint_info, paint_offset);
 #endif
diff --git a/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp
index 1f51ca22..69f1eef 100644
--- a/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp
@@ -10,7 +10,6 @@
 #include "core/layout/LayoutBox.h"
 #include "core/layout/LayoutScrollbar.h"
 #include "core/layout/LayoutScrollbarPart.h"
-#include "core/layout/PaintInvalidationState.h"
 #include "core/paint/FindPaintOffsetAndVisualRectNeedingUpdate.h"
 #include "core/paint/ObjectPaintInvalidator.h"
 #include "core/paint/PaintInvalidator.h"
@@ -205,13 +204,6 @@
   ClearNeedsPaintInvalidationForScrollControls();
 }
 
-void PaintInvalidationCapableScrollableArea::
-    InvalidatePaintOfScrollControlsIfNeeded(
-        const PaintInvalidationState& paint_invalidation_state) {
-  InvalidatePaintOfScrollControlsIfNeeded(
-      PaintInvalidatorContextAdapter(paint_invalidation_state));
-}
-
 void PaintInvalidationCapableScrollableArea::ClearPreviousVisualRects() {
   SetHorizontalScrollbarVisualRect(LayoutRect());
   SetVerticalScrollbarVisualRect(LayoutRect());
diff --git a/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.h b/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.h
index 993658af..73a2f92 100644
--- a/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.h
+++ b/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.h
@@ -12,7 +12,6 @@
 namespace blink {
 
 class LayoutScrollbarPart;
-class PaintInvalidationState;
 struct PaintInvalidatorContext;
 
 // Base class of LocalFrameView and PaintLayerScrollableArea to share paint
@@ -28,7 +27,6 @@
 
   void WillRemoveScrollbar(Scrollbar&, ScrollbarOrientation) override;
 
-  void InvalidatePaintOfScrollControlsIfNeeded(const PaintInvalidationState&);
   void InvalidatePaintOfScrollControlsIfNeeded(const PaintInvalidatorContext&);
 
   // Should be called when the previous visual rects are no longer valid.
diff --git a/third_party/WebKit/Source/core/paint/PaintInvalidator.h b/third_party/WebKit/Source/core/paint/PaintInvalidator.h
index 9176c35..f32687f2 100644
--- a/third_party/WebKit/Source/core/paint/PaintInvalidator.h
+++ b/third_party/WebKit/Source/core/paint/PaintInvalidator.h
@@ -27,14 +27,10 @@
             parent_context.paint_invalidation_container_for_stacked_contents),
         painting_layer(parent_context.painting_layer) {}
 
-  // This method is virtual temporarily to adapt PaintInvalidatorContext and the
-  // legacy PaintInvalidationState for code shared by old code and new code.
-  virtual void MapLocalRectToVisualRectInBacking(const LayoutObject&,
-                                                 LayoutRect&) const;
+  void MapLocalRectToVisualRectInBacking(const LayoutObject&,
+                                         LayoutRect&) const;
 
   bool NeedsVisualRectUpdate(const LayoutObject& object) const {
-    if (!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-      return true;
 #if DCHECK_IS_ON()
     if (force_visual_rect_update_for_checking_)
       return true;
diff --git a/third_party/WebKit/Source/core/paint/PaintLayer.cpp b/third_party/WebKit/Source/core/paint/PaintLayer.cpp
index 27db6a52..3cb0ba1e 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayer.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayer.cpp
@@ -104,7 +104,6 @@
   Persistent<PaintLayerScrollableArea> scrollable_area;
   struct {
     IntSize size;
-    void* pointer;
     LayoutRect rect;
   } previous_paint_status;
 };
@@ -657,9 +656,7 @@
     if (layer->needs_descendant_dependent_flags_update_)
       break;
     layer->needs_descendant_dependent_flags_update_ = true;
-
-    if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-      layer->GetLayoutObject().SetNeedsPaintPropertyUpdate();
+    layer->GetLayoutObject().SetNeedsPaintPropertyUpdate();
   }
 }
 
@@ -715,9 +712,8 @@
                                         child->GetLayoutObject().HasClipPath();
     }
 
-    if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled() &&
-        old_has_non_isolated_descendant_with_blend_mode !=
-            static_cast<bool>(has_non_isolated_descendant_with_blend_mode_))
+    if (old_has_non_isolated_descendant_with_blend_mode !=
+        static_cast<bool>(has_non_isolated_descendant_with_blend_mode_))
       GetLayoutObject().SetNeedsPaintPropertyUpdate();
     needs_descendant_dependent_flags_update_ = false;
   }
@@ -2778,14 +2774,7 @@
 
 bool PaintLayer::PaintsWithTransform(
     GlobalPaintFlags global_paint_flags) const {
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-    return Transform() &&
-           ((global_paint_flags & kGlobalPaintFlattenCompositingLayers) ||
-            GetCompositingState() != kPaintsIntoOwnBacking);
-  }
-
-  return (Transform() ||
-          GetLayoutObject().Style()->GetPosition() == EPosition::kFixed) &&
+  return Transform() &&
          ((global_paint_flags & kGlobalPaintFlattenCompositingLayers) ||
           GetCompositingState() != kPaintsIntoOwnBacking);
 }
@@ -3101,11 +3090,7 @@
 
 PaintLayerClipper PaintLayer::Clipper(
     GeometryMapperOption geometry_mapper_option) const {
-  if (geometry_mapper_option == kUseGeometryMapper) {
-    DCHECK(RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
-    return PaintLayerClipper(*this, true);
-  }
-  return PaintLayerClipper(*this, false);
+  return PaintLayerClipper(*this, geometry_mapper_option == kUseGeometryMapper);
 }
 
 bool PaintLayer::ScrollsOverflow() const {
diff --git a/third_party/WebKit/Source/core/paint/PaintLayer.h b/third_party/WebKit/Source/core/paint/PaintLayer.h
index 3b308a3..ef3c66d 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayer.h
+++ b/third_party/WebKit/Source/core/paint/PaintLayer.h
@@ -565,8 +565,8 @@
 
   // Adjusts the given rect (in the coordinate space of the LayoutObject) to the
   // coordinate space of |paintInvalidationContainer|'s GraphicsLayer backing.
-  // Should use PaintInvalidationState::mapRectToPaintInvalidationBacking()
-  // instead if PaintInvalidationState is available.
+  // Should use PaintInvalidatorContext::MapRectToPaintInvalidationBacking()
+  // instead if PaintInvalidatorContext.
   static void MapRectToPaintInvalidationBacking(
       const LayoutObject&,
       const LayoutBoxModelObject& paint_invalidation_container,
@@ -851,7 +851,7 @@
 
   void UpdateSelfPaintingLayer();
   // This is O(depth) so avoid calling this in loops. Instead use optimizations
-  // like those in PaintInvalidationState.
+  // like those in PaintInvalidatorContext.
   PaintLayer* EnclosingSelfPaintingLayer();
 
   PaintLayer* EnclosingTransformedAncestor() const;
@@ -930,15 +930,6 @@
     previous_scroll_offset_accumulation_for_painting_ = s;
   }
 
-  ClipRects* PreviousClipRects() const {
-    DCHECK(!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
-    return previous_clip_rects_.Get();
-  }
-  void SetPreviousClipRects(ClipRects& clip_rects) {
-    previous_clip_rects_ = &clip_rects;
-  }
-  void ClearPreviousClipRects() { previous_clip_rects_.Clear(); }
-
   LayoutRect PreviousPaintDirtyRect() const {
     return previous_paint_dirty_rect_;
   }
@@ -1271,7 +1262,6 @@
   std::unique_ptr<PaintLayerStackingNode> stacking_node_;
 
   IntSize previous_scroll_offset_accumulation_for_painting_;
-  RefPtr<ClipRects> previous_clip_rects_;
   LayoutRect previous_paint_dirty_rect_;
 
   std::unique_ptr<PaintLayerRareData> rare_data_;
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerClipperTest.cpp b/third_party/WebKit/Source/core/paint/PaintLayerClipperTest.cpp
index 9d17f1a..2c9b9f1 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerClipperTest.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerClipperTest.cpp
@@ -14,13 +14,9 @@
 
 namespace blink {
 
-class PaintLayerClipperTest : public ::testing::WithParamInterface<bool>,
-                              private ScopedSlimmingPaintInvalidationForTest,
-                              public RenderingTest {
+class PaintLayerClipperTest : public RenderingTest {
  public:
-  PaintLayerClipperTest()
-      : ScopedSlimmingPaintInvalidationForTest(GetParam()),
-        RenderingTest(EmptyLocalFrameClient::Create()) {}
+  PaintLayerClipperTest() : RenderingTest(EmptyLocalFrameClient::Create()) {}
 
   void SetUp() override {
     LayoutTestSupport::SetMockThemeEnabledForTest(true);
@@ -33,11 +29,7 @@
   }
 };
 
-INSTANTIATE_TEST_CASE_P(All,
-                        PaintLayerClipperTest,
-                        ::testing::ValuesIn(std::vector<bool>{false, true}));
-
-TEST_P(PaintLayerClipperTest, LayoutSVGRoot) {
+TEST_F(PaintLayerClipperTest, LayoutSVGRoot) {
   SetBodyInnerHTML(
       "<!DOCTYPE html>"
       "<svg id=target width=200 height=300 style='position: relative'>"
@@ -57,12 +49,9 @@
   LayoutRect layer_bounds;
   ClipRect background_rect, foreground_rect;
 
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
-  target_paint_layer->Clipper(option).CalculateRects(
-      context, LayoutRect(LayoutRect::InfiniteIntRect()), layer_bounds,
-      background_rect, foreground_rect);
+  target_paint_layer->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context, LayoutRect(LayoutRect::InfiniteIntRect()),
+                      layer_bounds, background_rect, foreground_rect);
 
   EXPECT_EQ(LayoutRect(FloatRect(8.25, 8.35, 200, 300)),
             background_rect.Rect());
@@ -71,7 +60,7 @@
   EXPECT_EQ(LayoutRect(FloatRect(8.25, 8.35, 200, 300)), layer_bounds);
 }
 
-TEST_P(PaintLayerClipperTest, ControlClip) {
+TEST_F(PaintLayerClipperTest, ControlClip) {
   SetBodyInnerHTML(
       "<!DOCTYPE html>"
       "<input id=target style='position:absolute; width: 200px; height: 300px'"
@@ -88,12 +77,9 @@
   LayoutRect layer_bounds;
   ClipRect background_rect, foreground_rect;
 
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
-  target_paint_layer->Clipper(option).CalculateRects(
-      context, LayoutRect(LayoutRect::InfiniteIntRect()), layer_bounds,
-      background_rect, foreground_rect);
+  target_paint_layer->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context, LayoutRect(LayoutRect::InfiniteIntRect()),
+                      layer_bounds, background_rect, foreground_rect);
 #if OS(MACOSX)
   // If the PaintLayer clips overflow, the background rect is intersected with
   // the PaintLayer bounds...
@@ -111,7 +97,7 @@
 #endif
 }
 
-TEST_P(PaintLayerClipperTest, RoundedClip) {
+TEST_F(PaintLayerClipperTest, RoundedClip) {
   SetBodyInnerHTML(
       "<!DOCTYPE html>"
       "<div id='target' style='position:absolute; width: 200px; height: 300px;"
@@ -131,12 +117,9 @@
   LayoutRect layer_bounds;
   ClipRect background_rect, foreground_rect;
 
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
-  target_paint_layer->Clipper(option).CalculateRects(
-      context, LayoutRect(LayoutRect::InfiniteIntRect()), layer_bounds,
-      background_rect, foreground_rect);
+  target_paint_layer->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context, LayoutRect(LayoutRect::InfiniteIntRect()),
+                      layer_bounds, background_rect, foreground_rect);
 
   // Only the foreground rect gets hasRadius set for overflow clipping
   // of descendants.
@@ -147,7 +130,7 @@
   EXPECT_EQ(LayoutRect(8, 8, 200, 300), layer_bounds);
 }
 
-TEST_P(PaintLayerClipperTest, RoundedClipNested) {
+TEST_F(PaintLayerClipperTest, RoundedClipNested) {
   SetBodyInnerHTML(
       "<!DOCTYPE html>"
       "<div id='parent' style='position:absolute; width: 200px; height: 300px;"
@@ -170,12 +153,9 @@
   LayoutRect layer_bounds;
   ClipRect background_rect, foreground_rect;
 
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
-  child_paint_layer->Clipper(option).CalculateRects(
-      context, LayoutRect(LayoutRect::InfiniteIntRect()), layer_bounds,
-      background_rect, foreground_rect);
+  child_paint_layer->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context, LayoutRect(LayoutRect::InfiniteIntRect()),
+                      layer_bounds, background_rect, foreground_rect);
 
   EXPECT_EQ(LayoutRect(0, 0, 200, 300), background_rect.Rect());
   EXPECT_TRUE(background_rect.HasRadius());
@@ -184,7 +164,7 @@
   EXPECT_EQ(LayoutRect(0, 0, 500, 500), layer_bounds);
 }
 
-TEST_P(PaintLayerClipperTest, ControlClipSelect) {
+TEST_F(PaintLayerClipperTest, ControlClipSelect) {
   SetBodyInnerHTML(
       "<select id='target' style='position: relative; width: 100px; "
       "    background: none; border: none; padding: 0px 15px 0px 5px;'>"
@@ -204,12 +184,9 @@
   LayoutRect layer_bounds;
   ClipRect background_rect, foreground_rect;
 
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
-  target_paint_layer->Clipper(option).CalculateRects(
-      context, LayoutRect(LayoutRect::InfiniteIntRect()), layer_bounds,
-      background_rect, foreground_rect);
+  target_paint_layer->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context, LayoutRect(LayoutRect::InfiniteIntRect()),
+                      layer_bounds, background_rect, foreground_rect);
 // The control clip for a select excludes the area for the down arrow.
 #if OS(MACOSX)
   EXPECT_EQ(LayoutRect(16, 9, 79, 13), foreground_rect.Rect());
@@ -220,7 +197,7 @@
 #endif
 }
 
-TEST_P(PaintLayerClipperTest, LayoutSVGRootChild) {
+TEST_F(PaintLayerClipperTest, LayoutSVGRootChild) {
   SetBodyInnerHTML(
       "<svg width=200 height=300 style='position: relative'>"
       "  <foreignObject width=400 height=500>"
@@ -237,18 +214,15 @@
   LayoutRect layer_bounds;
   ClipRect background_rect, foreground_rect;
 
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
-  target_paint_layer->Clipper(option).CalculateRects(
-      context, LayoutRect(LayoutRect::InfiniteIntRect()), layer_bounds,
-      background_rect, foreground_rect);
+  target_paint_layer->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context, LayoutRect(LayoutRect::InfiniteIntRect()),
+                      layer_bounds, background_rect, foreground_rect);
   EXPECT_EQ(LayoutRect(8, 8, 200, 300), background_rect.Rect());
   EXPECT_EQ(LayoutRect(8, 8, 200, 300), foreground_rect.Rect());
   EXPECT_EQ(LayoutRect(8, 8, 400, 0), layer_bounds);
 }
 
-TEST_P(PaintLayerClipperTest, ContainPaintClip) {
+TEST_F(PaintLayerClipperTest, ContainPaintClip) {
   SetBodyInnerHTML(
       "<div id='target'"
       "    style='contain: paint; width: 200px; height: 200px; overflow: auto'>"
@@ -262,11 +236,9 @@
   LayoutRect layer_bounds;
   ClipRect background_rect, foreground_rect;
 
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
-  layer->Clipper(option).CalculateRects(context, infinite_rect, layer_bounds,
-                                        background_rect, foreground_rect);
+  layer->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context, infinite_rect, layer_bounds, background_rect,
+                      foreground_rect);
   EXPECT_GE(background_rect.Rect().Size().Width().ToInt(), 33554422);
   EXPECT_GE(background_rect.Rect().Size().Height().ToInt(), 33554422);
   EXPECT_EQ(background_rect.Rect(), foreground_rect.Rect());
@@ -274,15 +246,15 @@
 
   ClipRectsContext context_clip(layer, kPaintingClipRects);
 
-  layer->Clipper(option).CalculateRects(context_clip, infinite_rect,
-                                        layer_bounds, background_rect,
-                                        foreground_rect);
+  layer->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context_clip, infinite_rect, layer_bounds,
+                      background_rect, foreground_rect);
   EXPECT_EQ(LayoutRect(0, 0, 200, 200), background_rect.Rect());
   EXPECT_EQ(LayoutRect(0, 0, 200, 200), foreground_rect.Rect());
   EXPECT_EQ(LayoutRect(0, 0, 200, 200), layer_bounds);
 }
 
-TEST_P(PaintLayerClipperTest, NestedContainPaintClip) {
+TEST_F(PaintLayerClipperTest, NestedContainPaintClip) {
   SetBodyInnerHTML(
       "<div style='contain: paint; width: 200px; height: 200px; overflow: "
       "auto'>"
@@ -298,26 +270,24 @@
   LayoutRect layer_bounds;
   ClipRect background_rect, foreground_rect;
 
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
-  layer->Clipper(option).CalculateRects(context, infinite_rect, layer_bounds,
-                                        background_rect, foreground_rect);
+  layer->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context, infinite_rect, layer_bounds, background_rect,
+                      foreground_rect);
   EXPECT_EQ(LayoutRect(0, 0, 200, 400), background_rect.Rect());
   EXPECT_EQ(LayoutRect(0, 0, 200, 400), foreground_rect.Rect());
   EXPECT_EQ(LayoutRect(0, 0, 200, 400), layer_bounds);
 
   ClipRectsContext context_clip(layer->Parent(), kPaintingClipRects);
 
-  layer->Clipper(option).CalculateRects(context_clip, infinite_rect,
-                                        layer_bounds, background_rect,
-                                        foreground_rect);
+  layer->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context_clip, infinite_rect, layer_bounds,
+                      background_rect, foreground_rect);
   EXPECT_EQ(LayoutRect(0, 0, 200, 200), background_rect.Rect());
   EXPECT_EQ(LayoutRect(0, 0, 200, 200), foreground_rect.Rect());
   EXPECT_EQ(LayoutRect(0, 0, 200, 400), layer_bounds);
 }
 
-TEST_P(PaintLayerClipperTest, LocalClipRectFixedUnderTransform) {
+TEST_F(PaintLayerClipperTest, LocalClipRectFixedUnderTransform) {
   SetBodyInnerHTML(
       "<div id='transformed'"
       "    style='will-change: transform; width: 100px; height: 100px;"
@@ -335,16 +305,15 @@
   PaintLayer* fixed =
       ToLayoutBoxModelObject(GetLayoutObjectByElementId("fixed"))->Layer();
 
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
   EXPECT_EQ(LayoutRect(0, 0, 100, 100),
-            transformed->Clipper(option).LocalClipRect(*transformed));
+            transformed->Clipper(PaintLayer::kUseGeometryMapper)
+                .LocalClipRect(*transformed));
   EXPECT_EQ(LayoutRect(0, 50, 100, 100),
-            fixed->Clipper(option).LocalClipRect(*transformed));
+            fixed->Clipper(PaintLayer::kUseGeometryMapper)
+                .LocalClipRect(*transformed));
 }
 
-TEST_P(PaintLayerClipperTest, ClearClipRectsRecursive) {
+TEST_F(PaintLayerClipperTest, ClearClipRectsRecursive) {
   // SPv2 will re-use a global GeometryMapper, so this
   // logic does not apply.
   if (RuntimeEnabledFeatures::SlimmingPaintV2Enabled())
@@ -371,16 +340,14 @@
   EXPECT_TRUE(parent->GetClipRectsCache());
   EXPECT_TRUE(child->GetClipRectsCache());
 
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
-  parent->Clipper(option).ClearClipRectsIncludingDescendants();
+  parent->Clipper(PaintLayer::kUseGeometryMapper)
+      .ClearClipRectsIncludingDescendants();
 
   EXPECT_FALSE(parent->GetClipRectsCache());
   EXPECT_FALSE(child->GetClipRectsCache());
 }
 
-TEST_P(PaintLayerClipperTest, ClearClipRectsRecursiveChild) {
+TEST_F(PaintLayerClipperTest, ClearClipRectsRecursiveChild) {
   // SPv2 will re-use a global GeometryMapper, so this
   // logic does not apply.
   if (RuntimeEnabledFeatures::SlimmingPaintV2Enabled())
@@ -407,57 +374,14 @@
   EXPECT_TRUE(parent->GetClipRectsCache());
   EXPECT_TRUE(child->GetClipRectsCache());
 
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
-  child->Clipper(option).ClearClipRectsIncludingDescendants();
+  child->Clipper(PaintLayer::kUseGeometryMapper)
+      .ClearClipRectsIncludingDescendants();
 
   EXPECT_TRUE(parent->GetClipRectsCache());
   EXPECT_FALSE(child->GetClipRectsCache());
 }
 
-TEST_P(PaintLayerClipperTest, ClearClipRectsRecursiveOneType) {
-  // SPv2 will re-use a global GeometryMapper, so this
-  // logic does not apply.
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    return;
-
-  SetBodyInnerHTML(
-      "<style>"
-      "div { "
-      "  width: 5px; height: 5px; background: blue;"
-      "  position: relative;"
-      "}"
-      "</style>"
-      "<div id='parent'>"
-      "  <div id='child'>"
-      "    <div id='grandchild'></div>"
-      "  </div>"
-      "</div>");
-
-  PaintLayer* parent =
-      ToLayoutBoxModelObject(GetLayoutObjectByElementId("parent"))->Layer();
-  PaintLayer* child =
-      ToLayoutBoxModelObject(GetLayoutObjectByElementId("child"))->Layer();
-
-  EXPECT_TRUE(parent->GetClipRectsCache());
-  EXPECT_TRUE(child->GetClipRectsCache());
-  EXPECT_TRUE(parent->GetClipRectsCache()->Get(kAbsoluteClipRects).root);
-  EXPECT_TRUE(child->GetClipRectsCache()->Get(kAbsoluteClipRects).root);
-
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
-  parent->Clipper(option).ClearClipRectsIncludingDescendants(
-      kAbsoluteClipRects);
-
-  EXPECT_TRUE(parent->GetClipRectsCache());
-  EXPECT_TRUE(child->GetClipRectsCache());
-  EXPECT_FALSE(parent->GetClipRectsCache()->Get(kAbsoluteClipRects).root);
-  EXPECT_FALSE(parent->GetClipRectsCache()->Get(kAbsoluteClipRects).root);
-}
-
-TEST_P(PaintLayerClipperTest, CSSClip) {
+TEST_F(PaintLayerClipperTest, CSSClip) {
   SetBodyInnerHTML(
       "<style>"
       "  #target { "
@@ -470,21 +394,19 @@
   PaintLayer* target =
       ToLayoutBoxModelObject(GetLayoutObjectByElementId("target"))->Layer();
   ClipRectsContext context(target, kUncachedClipRects);
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
   LayoutRect infinite_rect(LayoutRect::InfiniteIntRect());
   LayoutRect layer_bounds(infinite_rect);
   ClipRect background_rect(infinite_rect);
   ClipRect foreground_rect(infinite_rect);
-  target->Clipper(option).CalculateRects(context, infinite_rect, layer_bounds,
-                                         background_rect, foreground_rect);
+  target->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context, infinite_rect, layer_bounds, background_rect,
+                      foreground_rect);
 
   EXPECT_EQ(LayoutRect(0, 0, 50, 100), background_rect.Rect());
   EXPECT_EQ(LayoutRect(0, 0, 50, 100), foreground_rect.Rect());
 }
 
-TEST_P(PaintLayerClipperTest, Filter) {
+TEST_F(PaintLayerClipperTest, Filter) {
   SetBodyInnerHTML(
       "<style>"
       "  * { margin: 0 }"
@@ -498,15 +420,13 @@
   PaintLayer* target =
       ToLayoutBoxModelObject(GetLayoutObjectByElementId("target"))->Layer();
   ClipRectsContext context(target, kUncachedClipRects);
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
   LayoutRect infinite_rect(LayoutRect::InfiniteIntRect());
   LayoutRect layer_bounds(infinite_rect);
   ClipRect background_rect(infinite_rect);
   ClipRect foreground_rect(infinite_rect);
-  target->Clipper(option).CalculateRects(context, infinite_rect, layer_bounds,
-                                         background_rect, foreground_rect);
+  target->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context, infinite_rect, layer_bounds, background_rect,
+                      foreground_rect);
 
   EXPECT_EQ(LayoutRect(-12, -9, 124, 224), background_rect.Rect());
   EXPECT_EQ(LayoutRect(0, 0, 100, 200), foreground_rect.Rect());
@@ -519,7 +439,7 @@
       && rect.Y().Round() < -10000000 && rect.MaxY().Round() > 10000000;
 }
 
-TEST_P(PaintLayerClipperTest, IgnoreRootLayerClipWithCSSClip) {
+TEST_F(PaintLayerClipperTest, IgnoreRootLayerClipWithCSSClip) {
   SetBodyInnerHTML(
       "<style>"
       "  #root { "
@@ -539,21 +459,19 @@
   PaintLayer* target =
       ToLayoutBoxModelObject(GetLayoutObjectByElementId("target"))->Layer();
   ClipRectsContext context(root, kPaintingClipRectsIgnoringOverflowClip);
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
   LayoutRect infinite_rect(LayoutRect::InfiniteIntRect());
   LayoutRect layer_bounds(infinite_rect);
   ClipRect background_rect(infinite_rect);
   ClipRect foreground_rect(infinite_rect);
-  target->Clipper(option).CalculateRects(context, infinite_rect, layer_bounds,
-                                         background_rect, foreground_rect);
+  target->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context, infinite_rect, layer_bounds, background_rect,
+                      foreground_rect);
 
   EXPECT_TRUE(IsInfinite(background_rect.Rect()));
   EXPECT_TRUE(IsInfinite(foreground_rect.Rect()));
 }
 
-TEST_P(PaintLayerClipperTest, IgnoreRootLayerClipWithOverflowClip) {
+TEST_F(PaintLayerClipperTest, IgnoreRootLayerClipWithOverflowClip) {
   SetBodyInnerHTML(
       "<style>"
       "  #root { "
@@ -573,21 +491,19 @@
   PaintLayer* target =
       ToLayoutBoxModelObject(GetLayoutObjectByElementId("target"))->Layer();
   ClipRectsContext context(root, kPaintingClipRectsIgnoringOverflowClip);
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
   LayoutRect infinite_rect(LayoutRect::InfiniteIntRect());
   LayoutRect layer_bounds(infinite_rect);
   ClipRect background_rect(infinite_rect);
   ClipRect foreground_rect(infinite_rect);
-  target->Clipper(option).CalculateRects(context, infinite_rect, layer_bounds,
-                                         background_rect, foreground_rect);
+  target->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context, infinite_rect, layer_bounds, background_rect,
+                      foreground_rect);
 
   EXPECT_TRUE(IsInfinite(background_rect.Rect()));
   EXPECT_TRUE(IsInfinite(foreground_rect.Rect()));
 }
 
-TEST_P(PaintLayerClipperTest, IgnoreRootLayerClipWithBothClip) {
+TEST_F(PaintLayerClipperTest, IgnoreRootLayerClipWithBothClip) {
   SetBodyInnerHTML(
       "<style>"
       "  #root { "
@@ -608,15 +524,13 @@
   PaintLayer* target =
       ToLayoutBoxModelObject(GetLayoutObjectByElementId("target"))->Layer();
   ClipRectsContext context(root, kPaintingClipRectsIgnoringOverflowClip);
-  PaintLayer::GeometryMapperOption option = PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    option = PaintLayer::kUseGeometryMapper;
   LayoutRect infinite_rect(LayoutRect::InfiniteIntRect());
   LayoutRect layer_bounds(infinite_rect);
   ClipRect background_rect(infinite_rect);
   ClipRect foreground_rect(infinite_rect);
-  target->Clipper(option).CalculateRects(context, infinite_rect, layer_bounds,
-                                         background_rect, foreground_rect);
+  target->Clipper(PaintLayer::kUseGeometryMapper)
+      .CalculateRects(context, infinite_rect, layer_bounds, background_rect,
+                      foreground_rect);
 
   EXPECT_TRUE(IsInfinite(background_rect.Rect()));
   EXPECT_TRUE(IsInfinite(foreground_rect.Rect()));
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
index e1d5a415..4ba3f1d 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
@@ -227,21 +227,6 @@
   if (paint_layer.NeedsRepaint())
     needs_repaint = true;
 
-  // Repaint if layer's clip changes.
-  if (!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-    ClipRects& clip_rects =
-        paint_layer.Clipper(PaintLayer::kDoNotUseGeometryMapper)
-            .PaintingClipRects(painting_info.root_layer, respect_overflow_clip,
-                               subpixel_accumulation);
-    ClipRects* previous_clip_rects = paint_layer.PreviousClipRects();
-    if (&clip_rects != previous_clip_rects &&
-        (!previous_clip_rects || clip_rects != *previous_clip_rects)) {
-      needs_repaint = true;
-      should_clear_empty_paint_phase_flags = true;
-    }
-    paint_layer.SetPreviousClipRects(clip_rects);
-  }
-
   // Repaint if previously the layer might be clipped by paintDirtyRect and
   // paintDirtyRect changes.
   if (paint_layer.PreviousPaintResult() == kMayBeClippedByPaintDirtyRect &&
@@ -445,11 +430,6 @@
       local_painting_info.paint_dirty_rect.MoveBy(offset_to_clipper);
     }
 
-    PaintLayer::GeometryMapperOption geometry_mapper_option =
-        PaintLayer::kDoNotUseGeometryMapper;
-    if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-      geometry_mapper_option = PaintLayer::kUseGeometryMapper;
-
     // TODO(trchen): We haven't decided how to handle visual fragmentation with
     // SPv2.  Related thread
     // https://groups.google.com/a/chromium.org/forum/#!topic/graphics-dev/81XuWFf-mxM
@@ -458,7 +438,7 @@
       paint_layer_for_fragments->AppendSingleFragmentIgnoringPagination(
           layer_fragments, local_painting_info.root_layer,
           local_painting_info.paint_dirty_rect, cache_slot,
-          geometry_mapper_option, kIgnorePlatformOverlayScrollbarSize,
+          PaintLayer::kUseGeometryMapper, kIgnorePlatformOverlayScrollbarSize,
           respect_overflow_clip, &offset_from_root,
           local_painting_info.sub_pixel_accumulation);
     } else if (IsFixedPositionObjectInPagedMedia()) {
@@ -466,7 +446,7 @@
       paint_layer_for_fragments->AppendSingleFragmentIgnoringPagination(
           single_fragment, local_painting_info.root_layer,
           local_painting_info.paint_dirty_rect, cache_slot,
-          geometry_mapper_option, kIgnorePlatformOverlayScrollbarSize,
+          PaintLayer::kUseGeometryMapper, kIgnorePlatformOverlayScrollbarSize,
           respect_overflow_clip, &offset_from_root,
           local_painting_info.sub_pixel_accumulation);
       RepeatFixedPositionObjectInPages(single_fragment[0], painting_info,
@@ -475,7 +455,7 @@
       paint_layer_for_fragments->CollectFragments(
           layer_fragments, local_painting_info.root_layer,
           local_painting_info.paint_dirty_rect, cache_slot,
-          geometry_mapper_option, kIgnorePlatformOverlayScrollbarSize,
+          PaintLayer::kUseGeometryMapper, kIgnorePlatformOverlayScrollbarSize,
           respect_overflow_clip, &offset_from_root,
           local_painting_info.sub_pixel_accumulation);
       // PaintLayer::collectFragments depends on the paint dirty rect in
@@ -706,11 +686,6 @@
   // its parent.
   PaintLayer* parent_layer = paint_layer_.Parent();
 
-  PaintLayer::GeometryMapperOption geometry_mapper_option =
-      PaintLayer::kDoNotUseGeometryMapper;
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    geometry_mapper_option = PaintLayer::kUseGeometryMapper;
-
   PaintResult result = kFullyPainted;
   PaintLayer* pagination_layer = paint_layer_.EnclosingPaginationLayer();
   PaintLayerFragments layer_fragments;
@@ -751,9 +726,10 @@
     // here.
     pagination_layer->CollectFragments(
         layer_fragments, painting_info.root_layer,
-        painting_info.paint_dirty_rect, cache_slot, geometry_mapper_option,
-        kIgnorePlatformOverlayScrollbarSize, respect_overflow_clip, nullptr,
-        painting_info.sub_pixel_accumulation, &transformed_extent);
+        painting_info.paint_dirty_rect, cache_slot,
+        PaintLayer::kUseGeometryMapper, kIgnorePlatformOverlayScrollbarSize,
+        respect_overflow_clip, nullptr, painting_info.sub_pixel_accumulation,
+        &transformed_extent);
     // PaintLayer::collectFragments depends on the paint dirty rect in
     // complicated ways. For now, always assume a partially painted output
     // for fragmented content.
@@ -788,7 +764,7 @@
                                     paint_layer_.GetLayoutObject()) ==
           kIgnoreOverflowClip)
         clip_rects_context.SetIgnoreOverflowClip();
-      paint_layer_.Clipper(geometry_mapper_option)
+      paint_layer_.Clipper(PaintLayer::kUseGeometryMapper)
           .CalculateBackgroundClipRect(clip_rects_context,
                                        ancestor_background_clip_rect);
     }
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerPainterTest.cpp b/third_party/WebKit/Source/core/paint/PaintLayerPainterTest.cpp
index 2de0131..3fab1f0 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerPainterTest.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerPainterTest.cpp
@@ -777,11 +777,6 @@
 
 TEST_P(PaintLayerPainterTest,
        TableCollapsedBorderNeedsPaintPhaseDescendantBlockBackgrounds) {
-  // TODO(wangxianzhu): Enable this test slimmingPaintInvalidation when its
-  // fully functional.
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    return;
-
   // "position: relative" makes the table and td self-painting layers.
   // The table's layer should be marked needsPaintPhaseDescendantBlockBackground
   // because it will paint collapsed borders in the phase.
@@ -802,11 +797,6 @@
 
 TEST_P(PaintLayerPainterTest,
        TableCollapsedBorderNeedsPaintPhaseDescendantBlockBackgroundsDynamic) {
-  // TODO(wangxianzhu): Enable this test slimmingPaintInvalidation when its
-  // fully functional.
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    return;
-
   SetBodyInnerHTML(
       "<table id='table' style='position: relative'>"
       "  <tr><td style='position: relative; border: 1px solid green'>"
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
index 1e3aafb..04fc15e 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
@@ -476,15 +476,13 @@
     Box().SetShouldDoFullPaintInvalidationIncludingNonCompositingDescendants();
   }
 
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-    // The scrollOffsetTranslation paint property depends on the scroll offset.
-    // (see: PaintPropertyTreeBuilder.updateProperties(LocalFrameView&,...) and
-    // PaintPropertyTreeBuilder.updateScrollAndScrollTranslation).
-    if (!RuntimeEnabledFeatures::RootLayerScrollingEnabled() && is_root_layer) {
-      frame_view->SetNeedsPaintPropertyUpdate();
-    } else {
-      Box().SetNeedsPaintPropertyUpdate();
-    }
+  // The scrollOffsetTranslation paint property depends on the scroll offset.
+  // (see: PaintPropertyTreeBuilder.updateProperties(LocalFrameView&,...) and
+  // PaintPropertyTreeBuilder.updateScrollAndScrollTranslation).
+  if (!RuntimeEnabledFeatures::RootLayerScrollingEnabled() && is_root_layer) {
+    frame_view->SetNeedsPaintPropertyUpdate();
+  } else {
+    Box().SetNeedsPaintPropertyUpdate();
   }
 
   // Schedule the scroll DOM event.
@@ -950,8 +948,7 @@
   // geometry.
   if (Box().GetNode()->IsElementNode()) {
     ToElement(Box().GetNode())->SetNeedsCompositingUpdate();
-    if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-      Box().SetNeedsPaintPropertyUpdate();
+    Box().SetNeedsPaintPropertyUpdate();
   }
 
   // On Android, where the VisualViewport supplies scrollbars, we need to
@@ -1851,11 +1848,9 @@
   if (did_scroll_overflow == ScrollsOverflow())
     return;
 
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-    // The scroll and scroll offset properties depend on |scrollsOverflow| (see:
-    // PaintPropertyTreeBuilder::updateScrollAndScrollTranslation).
-    Box().SetNeedsPaintPropertyUpdate();
-  }
+  // The scroll and scroll offset properties depend on |scrollsOverflow| (see:
+  // PaintPropertyTreeBuilder::updateScrollAndScrollTranslation).
+  Box().SetNeedsPaintPropertyUpdate();
 
   if (scrolls_overflow_) {
     DCHECK(CanHaveOverflowScrollbars(Box()));
diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreePrinter.cpp b/third_party/WebKit/Source/core/paint/PaintPropertyTreePrinter.cpp
index 886e0743..5e26a11 100644
--- a/third_party/WebKit/Source/core/paint/PaintPropertyTreePrinter.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreePrinter.cpp
@@ -26,7 +26,6 @@
 class PropertyTreePrinter {
  public:
   String TreeAsString(const LocalFrameView& frame_view) {
-    DCHECK(RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
     CollectPropertyNodes(frame_view);
 
     const PropertyTreeNode* root_node = LookupRootNode();
diff --git a/third_party/WebKit/Source/core/paint/PrePaintTreeWalkTest.cpp b/third_party/WebKit/Source/core/paint/PrePaintTreeWalkTest.cpp
index 2a2b00a..3cd37ed 100644
--- a/third_party/WebKit/Source/core/paint/PrePaintTreeWalkTest.cpp
+++ b/third_party/WebKit/Source/core/paint/PrePaintTreeWalkTest.cpp
@@ -25,13 +25,11 @@
 class PrePaintTreeWalkTest
     : public ::testing::WithParamInterface<SlimmingPaintAndRootLayerScrolling>,
       private ScopedSlimmingPaintV2ForTest,
-      private ScopedSlimmingPaintInvalidationForTest,
       private ScopedRootLayerScrollingForTest,
       public RenderingTest {
  public:
   PrePaintTreeWalkTest()
       : ScopedSlimmingPaintV2ForTest(GetParam().second),
-        ScopedSlimmingPaintInvalidationForTest(true),
         ScopedRootLayerScrollingForTest(GetParam().first),
         RenderingTest(EmptyLocalFrameClient::Create()) {}
 
diff --git a/third_party/WebKit/Source/core/paint/TableCellPaintInvalidator.cpp b/third_party/WebKit/Source/core/paint/TableCellPaintInvalidator.cpp
index 650a4e3..fa310c4d 100644
--- a/third_party/WebKit/Source/core/paint/TableCellPaintInvalidator.cpp
+++ b/third_party/WebKit/Source/core/paint/TableCellPaintInvalidator.cpp
@@ -18,7 +18,7 @@
 
 void TableCellPaintInvalidator::InvalidateContainerForCellGeometryChange(
     const LayoutObject& container,
-    const PaintInvalidatorContext* container_context) {
+    const PaintInvalidatorContext& container_context) {
   // We only need to do this if the container hasn't been fully invalidated.
   DCHECK(
       !IsFullPaintInvalidationReason(container.GetPaintInvalidationReason()));
@@ -27,20 +27,13 @@
   // so we should invalidate the container immediately here instead of setting
   // paint invalidation flags.
   ObjectPaintInvalidator invalidator(container);
-  if (!container_context) {
-    DCHECK(!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled());
-    ObjectPaintInvalidator(container).InvalidatePaintRectangle(
-        container.LocalVisualRect(), nullptr);
-    return;
-  }
-
-  container_context->painting_layer->SetNeedsRepaint();
+  container_context.painting_layer->SetNeedsRepaint();
   container.InvalidateDisplayItemClients(PaintInvalidationReason::kGeometry);
 
   if (!RuntimeEnabledFeatures::SlimmingPaintV2Enabled() &&
       context_.paint_invalidation_container !=
-          container_context->paint_invalidation_container) {
-    ObjectPaintInvalidatorWithContext(container, *container_context)
+          container_context.paint_invalidation_container) {
+    ObjectPaintInvalidatorWithContext(container, container_context)
         .InvalidatePaintRectangleWithContext(
             container.VisualRect(), PaintInvalidationReason::kGeometry);
   }
@@ -60,19 +53,14 @@
         (row.StyleRef().HasBackground() ||
          (table.HasCollapsedBorders() &&
           LIKELY(!table.ShouldPaintAllCollapsedBorders())))) {
-      InvalidateContainerForCellGeometryChange(
-          row, RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()
-                   ? context_.parent_context
-                   : nullptr);
+      InvalidateContainerForCellGeometryChange(row, *context_.parent_context);
     }
 
     if (UNLIKELY(table.ShouldPaintAllCollapsedBorders()) &&
         !IsFullPaintInvalidationReason(table.GetPaintInvalidationReason())) {
       DCHECK(table.HasCollapsedBorders());
       InvalidateContainerForCellGeometryChange(
-          table, RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()
-                     ? context_.parent_context->parent_context->parent_context
-                     : nullptr);
+          table, *context_.parent_context->parent_context->parent_context);
     }
 
     if (!IsFullPaintInvalidationReason(section.GetPaintInvalidationReason())) {
@@ -88,9 +76,7 @@
       }
       if (section_paints_background) {
         InvalidateContainerForCellGeometryChange(
-            section, RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()
-                         ? context_.parent_context->parent_context
-                         : nullptr);
+            section, *context_.parent_context->parent_context);
       }
     }
   }
diff --git a/third_party/WebKit/Source/core/paint/TableCellPaintInvalidator.h b/third_party/WebKit/Source/core/paint/TableCellPaintInvalidator.h
index 34bf286f..481f5fb4 100644
--- a/third_party/WebKit/Source/core/paint/TableCellPaintInvalidator.h
+++ b/third_party/WebKit/Source/core/paint/TableCellPaintInvalidator.h
@@ -27,7 +27,7 @@
  private:
   void InvalidateContainerForCellGeometryChange(
       const LayoutObject& container,
-      const PaintInvalidatorContext* container_context);
+      const PaintInvalidatorContext& container_context);
 
   const LayoutTableCell& cell_;
   const PaintInvalidatorContext& context_;
diff --git a/third_party/WebKit/Source/core/paint/TableCellPainter.cpp b/third_party/WebKit/Source/core/paint/TableCellPainter.cpp
index 55c460e..4baffbb2 100644
--- a/third_party/WebKit/Source/core/paint/TableCellPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/TableCellPainter.cpp
@@ -5,6 +5,7 @@
 #include "core/paint/TableCellPainter.h"
 
 #include "core/layout/LayoutTableCell.h"
+#include "core/paint/BackgroundImageGeometry.h"
 #include "core/paint/BlockPainter.h"
 #include "core/paint/BoxPainter.h"
 #include "core/paint/LayoutObjectDrawingRecorder.h"
@@ -61,10 +62,10 @@
       clip_rect.Expand(layout_table_cell_.BorderInsets());
       paint_info.context.Clip(PixelSnappedIntRect(clip_rect));
     }
+    BackgroundImageGeometry geometry(layout_table_cell_, &background_object);
     BoxPainter(layout_table_cell_)
-        .PaintFillLayers(paint_info, c, bg_layer, paint_rect,
-                         kBackgroundBleedNone, SkBlendMode::kSrcOver,
-                         &background_object);
+        .PaintFillLayers(paint_info, c, bg_layer, paint_rect, geometry,
+                         kBackgroundBleedNone, SkBlendMode::kSrcOver);
   }
 }
 
diff --git a/third_party/WebKit/Source/core/paint/ViewPainter.cpp b/third_party/WebKit/Source/core/paint/ViewPainter.cpp
index 250fe6927..ef48b2e 100644
--- a/third_party/WebKit/Source/core/paint/ViewPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/ViewPainter.cpp
@@ -9,6 +9,7 @@
 #include "core/layout/LayoutBox.h"
 #include "core/layout/LayoutView.h"
 #include "core/layout/compositing/CompositedLayerMapping.h"
+#include "core/paint/BackgroundImageGeometry.h"
 #include "core/paint/BlockPainter.h"
 #include "core/paint/BoxPainter.h"
 #include "core/paint/LayoutObjectDrawingRecorder.h"
@@ -209,6 +210,7 @@
     context.FillRect(background_rect, Color(), SkBlendMode::kClear);
   }
 
+  BackgroundImageGeometry geometry(layout_view_);
   for (auto it = reversed_paint_list.rbegin(); it != reversed_paint_list.rend();
        ++it) {
     DCHECK((*it)->Clip() == kBorderFillBox);
@@ -218,14 +220,15 @@
     if (should_paint_in_viewport_space) {
       BoxPainter::PaintFillLayer(layout_view_, paint_info, Color(), **it,
                                  LayoutRect(LayoutRect::InfiniteIntRect()),
-                                 kBackgroundBleedNone);
+                                 kBackgroundBleedNone, geometry);
     } else {
       context.Save();
       // TODO(trchen): We should be able to handle 3D-transformed root
       // background with slimming paint by using transform display items.
       context.ConcatCTM(transform.ToAffineTransform());
       BoxPainter::PaintFillLayer(layout_view_, paint_info, Color(), **it,
-                                 LayoutRect(paint_rect), kBackgroundBleedNone);
+                                 LayoutRect(paint_rect), kBackgroundBleedNone,
+                                 geometry);
       context.Restore();
     }
   }
diff --git a/third_party/WebKit/Source/core/scheduler/FrameThrottlingTest.cpp b/third_party/WebKit/Source/core/scheduler/FrameThrottlingTest.cpp
index 36409f0f..5a4d6be 100644
--- a/third_party/WebKit/Source/core/scheduler/FrameThrottlingTest.cpp
+++ b/third_party/WebKit/Source/core/scheduler/FrameThrottlingTest.cpp
@@ -1128,9 +1128,6 @@
 }
 
 TEST_P(FrameThrottlingTest, UpdatePaintPropertiesOnUnthrottling) {
-  if (!RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled())
-    return;
-
   SimRequest main_resource("https://example.com/", "text/html");
   SimRequest frame_resource("https://example.com/iframe.html", "text/html");
 
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp b/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp
index 8b6cd9bc..47f0040 100644
--- a/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp
@@ -302,10 +302,8 @@
 void SVGAnimateMotionElement::InvalidateForAnimateMotionTransformChange(
     LayoutObject& object) {
   object.SetNeedsTransformUpdate();
-  if (RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled()) {
-    // The transform paint property relies on the SVG transform value.
-    object.SetNeedsPaintPropertyUpdate();
-  }
+  // The transform paint property relies on the SVG transform value.
+  object.SetNeedsPaintPropertyUpdate();
   MarkForLayoutAndParentResourceInvalidation(&object);
 }
 
diff --git a/third_party/WebKit/Source/core/testing/Internals.cpp b/third_party/WebKit/Source/core/testing/Internals.cpp
index 4853968..7f678f2 100644
--- a/third_party/WebKit/Source/core/testing/Internals.cpp
+++ b/third_party/WebKit/Source/core/testing/Internals.cpp
@@ -733,6 +733,11 @@
   return &host->EnsureUserAgentShadowRoot();
 }
 
+void Internals::setBrowserControlsState(float height, bool shrinks_layout) {
+  document_->GetPage()->GetChromeClient().SetBrowserControlsState(
+      height, shrinks_layout);
+}
+
 ShadowRoot* Internals::shadowRoot(Element* host) {
   // FIXME: Internals::shadowRoot() in tests should be converted to
   // youngestShadowRoot() or oldestShadowRoot().
diff --git a/third_party/WebKit/Source/core/testing/Internals.h b/third_party/WebKit/Source/core/testing/Internals.h
index 9fa1309..ca564bf9 100644
--- a/third_party/WebKit/Source/core/testing/Internals.h
+++ b/third_party/WebKit/Source/core/testing/Internals.h
@@ -107,6 +107,8 @@
 
   CSSStyleDeclaration* computedStyleIncludingVisitedInfo(Node*) const;
 
+  void setBrowserControlsState(float height, bool shrinks_layout);
+
   ShadowRoot* createUserAgentShadowRoot(Element* host);
 
   ShadowRoot* shadowRoot(Element* host);
diff --git a/third_party/WebKit/Source/core/testing/Internals.idl b/third_party/WebKit/Source/core/testing/Internals.idl
index 3d36620..5a9ef15 100644
--- a/third_party/WebKit/Source/core/testing/Internals.idl
+++ b/third_party/WebKit/Source/core/testing/Internals.idl
@@ -55,6 +55,8 @@
     ShadowRoot oldestShadowRoot(Element host);
     [RaisesException] ShadowRoot youngerShadowRoot(Node root);
 
+    void setBrowserControlsState(float height, boolean shrinksLayout);
+
     [RaisesException] DOMString shadowRootType(Node root);
     [RaisesException] boolean hasShadowInsertionPoint(Node root);
     [RaisesException] boolean hasContentElement(Node root);
diff --git a/third_party/WebKit/Source/devtools/front_end/bindings/DebuggerWorkspaceBinding.js b/third_party/WebKit/Source/devtools/front_end/bindings/DebuggerWorkspaceBinding.js
index adce9082..8e96c0c 100644
--- a/third_party/WebKit/Source/devtools/front_end/bindings/DebuggerWorkspaceBinding.js
+++ b/third_party/WebKit/Source/devtools/front_end/bindings/DebuggerWorkspaceBinding.js
@@ -1,6 +1,7 @@
 // Copyright 2014 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.
+
 /**
  * @unrestricted
  * @implements {SDK.SDKModelObserver<!SDK.DebuggerModel>}
@@ -381,9 +382,6 @@
   }
 };
 
-/**
- * @unrestricted
- */
 Bindings.DebuggerWorkspaceBinding.StackTraceTopFrameLocation = class extends Bindings.LiveLocationWithPool {
   /**
    * @param {!Array<!SDK.DebuggerModel.Location>} rawLocations
@@ -393,12 +391,10 @@
    */
   constructor(rawLocations, binding, updateDelegate, locationPool) {
     super(updateDelegate, locationPool);
-
     this._updateScheduled = true;
-    /** @type {!Set<!Bindings.LiveLocation>} */
-    this._locations = new Set();
-    for (var location of rawLocations)
-      this._locations.add(binding.createLiveLocation(location, this._scheduleUpdate.bind(this), locationPool));
+    this._current = null;
+    this._locations = rawLocations.map(
+        location => binding.createLiveLocation(location, this._scheduleUpdate.bind(this), locationPool));
     this._updateLocation();
   }
 
@@ -425,24 +421,22 @@
     super.dispose();
     for (var location of this._locations)
       location.dispose();
+    this._locations = null;
+    this._current = null;
   }
 
   _scheduleUpdate() {
-    if (!this._updateScheduled) {
-      this._updateScheduled = true;
-      setImmediate(this._updateLocation.bind(this));
-    }
+    if (this._updateScheduled)
+      return;
+    this._updateScheduled = true;
+    setImmediate(this._updateLocation.bind(this));
   }
 
   _updateLocation() {
     this._updateScheduled = false;
-    this._current = this._locations.values().next().value;
-    for (var current of this._locations) {
-      if (!current.isBlackboxed()) {
-        this._current = current;
-        break;
-      }
-    }
+    if (!this._locations)
+      return;
+    this._current = this._locations.find(location => !location.isBlackboxed()) || this._locations[0];
     this.update();
   }
 };
diff --git a/third_party/WebKit/Source/modules/BUILD.gn b/third_party/WebKit/Source/modules/BUILD.gn
index b52c1d5..deb23c7 100644
--- a/third_party/WebKit/Source/modules/BUILD.gn
+++ b/third_party/WebKit/Source/modules/BUILD.gn
@@ -281,8 +281,8 @@
     "payments/CompleteTest.cpp",
     "payments/OnPaymentResponseTest.cpp",
     "payments/PaymentAddressTest.cpp",
+    "payments/PaymentEventDataConversionTest.cpp",
     "payments/PaymentRequestDetailsTest.cpp",
-    "payments/PaymentRequestEventDataConversionTest.cpp",
     "payments/PaymentRequestTest.cpp",
     "payments/PaymentRequestUpdateEventTest.cpp",
     "payments/PaymentResponseTest.cpp",
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
index 8a99193..82bc2487 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
@@ -1992,7 +1992,6 @@
     case kOutlineRole:
     case kProgressIndicatorRole:
     case kRadioGroupRole:
-    case kRegionRole:
     case kRootWebAreaRole:
     case kScrollBarRole:
     case kSearchRole:
@@ -2053,6 +2052,7 @@
     case kParagraphRole:
     case kPreRole:
     case kPresentationalRole:
+    case kRegionRole:
     // Spec says we should always expose the name on rows,
     // but for performance reasons we only do it
     // if the row might receive focus
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBCursor.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBCursor.cpp
index ee4c30a..ea07c52 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBCursor.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBCursor.cpp
@@ -138,8 +138,7 @@
 
 void IDBCursor::advance(unsigned count, ExceptionState& exception_state) {
   IDB_TRACE("IDBCursor::advanceRequestSetup");
-  IDBRequest::AsyncTraceState metrics("IDBCursor::advance", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBCursor::advance");
   if (!count) {
     exception_state.ThrowTypeError(
         "A count argument with value 0 (zero) was supplied, must be greater "
@@ -172,8 +171,7 @@
                                  const ScriptValue& key_value,
                                  ExceptionState& exception_state) {
   IDB_TRACE("IDBCursor::continueRequestSetup");
-  IDBRequest::AsyncTraceState metrics("IDBCursor::continue", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBCursor::continue");
 
   if (!transaction_->IsActive()) {
     exception_state.ThrowDOMException(kTransactionInactiveError,
@@ -210,8 +208,7 @@
                                    const ScriptValue& primary_key_value,
                                    ExceptionState& exception_state) {
   IDB_TRACE("IDBCursor::continuePrimaryKeyRequestSetup");
-  IDBRequest::AsyncTraceState metrics("IDBCursor::continuePrimaryKey", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBCursor::continuePrimaryKey");
 
   if (!transaction_->IsActive()) {
     exception_state.ThrowDOMException(kTransactionInactiveError,
@@ -316,8 +313,7 @@
 IDBRequest* IDBCursor::deleteFunction(ScriptState* script_state,
                                       ExceptionState& exception_state) {
   IDB_TRACE("IDBCursor::deleteRequestSetup");
-  IDBRequest::AsyncTraceState metrics("IDBCursor::delete", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBCursor::delete");
   if (!transaction_->IsActive()) {
     exception_state.ThrowDOMException(kTransactionInactiveError,
                                       transaction_->InactiveErrorMessage());
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBCursor.h b/third_party/WebKit/Source/modules/indexeddb/IDBCursor.h
index ce2ccca..4f9c332 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBCursor.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBCursor.h
@@ -120,7 +120,6 @@
   Member<IDBKey> key_;
   Member<IDBKey> primary_key_;
   RefPtr<IDBValue> value_;
-  int64_t next_tracing_id_ = 0;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBFactory.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBFactory.cpp
index 7cbb1a6..ee7c4ed 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBFactory.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBFactory.cpp
@@ -66,8 +66,7 @@
 IDBRequest* IDBFactory::GetDatabaseNames(ScriptState* script_state,
                                          ExceptionState& exception_state) {
   IDB_TRACE("IDBFactory::getDatabaseNamesRequestSetup");
-  IDBRequest::AsyncTraceState metrics("IDBFactory::getDatabaseNames", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBFactory::getDatabaseNames");
   IDBRequest* request = IDBRequest::Create(script_state, IDBAny::CreateNull(),
                                            nullptr, std::move(metrics));
   // TODO(jsbell): Used only by inspector; remove unneeded checks/exceptions?
@@ -112,8 +111,7 @@
                                            int64_t version,
                                            ExceptionState& exception_state) {
   IDB_TRACE1("IDBFactory::open", "name", name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBFactory::open", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBFactory::open");
   IDBDatabase::RecordApiCallsHistogram(kIDBOpenCall);
   DCHECK(version >= 1 || version == IDBDatabaseMetadata::kNoVersion);
   if (!IsContextValid(ExecutionContext::From(script_state)))
@@ -176,8 +174,7 @@
     ExceptionState& exception_state,
     bool force_close) {
   IDB_TRACE1("IDBFactory::deleteDatabase", "name", name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBFactory::deleteDatabase", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBFactory::deleteDatabase");
   IDBDatabase::RecordApiCallsHistogram(kIDBDeleteDatabaseCall);
   if (!IsContextValid(ExecutionContext::From(script_state)))
     return nullptr;
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBFactory.h b/third_party/WebKit/Source/modules/indexeddb/IDBFactory.h
index f77f103..48d2e50 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBFactory.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBFactory.h
@@ -78,7 +78,6 @@
                                            const String& name,
                                            ExceptionState&,
                                            bool);
-  int64_t next_tracing_id_ = 0;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBIndex.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBIndex.cpp
index 527148a..e77e938 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBIndex.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBIndex.cpp
@@ -117,8 +117,7 @@
                                  ExceptionState& exception_state) {
   IDB_TRACE1("IDBIndex::openCursorRequestSetup", "index_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBIndex::openCursor", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBIndex::openCursor");
   if (IsDeleted()) {
     exception_state.ThrowDOMException(kInvalidStateError,
                                       IDBDatabase::kIndexDeletedErrorMessage);
@@ -164,8 +163,7 @@
                             ExceptionState& exception_state) {
   IDB_TRACE1("IDBIndex::countRequestSetup", "index_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBIndex::count", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBIndex::count");
   if (IsDeleted()) {
     exception_state.ThrowDOMException(kInvalidStateError,
                                       IDBDatabase::kIndexDeletedErrorMessage);
@@ -202,8 +200,7 @@
                                     ExceptionState& exception_state) {
   IDB_TRACE1("IDBIndex::openKeyCursorRequestSetup", "index_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBIndex::openKeyCursor", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBIndex::openKeyCursor");
   if (IsDeleted()) {
     exception_state.ThrowDOMException(kInvalidStateError,
                                       IDBDatabase::kIndexDeletedErrorMessage);
@@ -240,8 +237,7 @@
                           const ScriptValue& key,
                           ExceptionState& exception_state) {
   IDB_TRACE1("IDBIndex::getRequestSetup", "index_name", metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBIndex::get", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBIndex::get");
   return GetInternal(script_state, key, exception_state, false,
                      std::move(metrics));
 }
@@ -259,8 +255,7 @@
                              ExceptionState& exception_state) {
   IDB_TRACE1("IDBIndex::getAllRequestSetup", "index_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBIndex::getAll", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBIndex::getAll");
   return GetAllInternal(script_state, range, max_count, exception_state, false,
                         std::move(metrics));
 }
@@ -278,8 +273,7 @@
                                  ExceptionState& exception_state) {
   IDB_TRACE1("IDBIndex::getAllKeysRequestSetup", "index_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBIndex::getAllKeys", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBIndex::getAllKeys");
   return GetAllInternal(script_state, range, max_count, exception_state,
                         /*key_only=*/true, std::move(metrics));
 }
@@ -289,8 +283,7 @@
                              ExceptionState& exception_state) {
   IDB_TRACE1("IDBIndex::getKeyRequestSetup", "index_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBIndex::getKey", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBIndex::getKey");
   return GetInternal(script_state, key, exception_state, true,
                      std::move(metrics));
 }
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBIndex.h b/third_party/WebKit/Source/modules/indexeddb/IDBIndex.h
index acc3ba1..45411245 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBIndex.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBIndex.h
@@ -140,7 +140,6 @@
   Member<IDBObjectStore> object_store_;
   Member<IDBTransaction> transaction_;
   bool deleted_ = false;
-  int64_t next_tracing_id_ = 0;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
index 1e89bd3..075fca029 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
@@ -133,8 +133,7 @@
                                 ExceptionState& exception_state) {
   IDB_TRACE1("IDBObjectStore::getRequestSetup", "store_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBObjectStore::get", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBObjectStore::get");
   if (IsDeleted()) {
     exception_state.ThrowDOMException(
         kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -174,8 +173,7 @@
                                    ExceptionState& exception_state) {
   IDB_TRACE1("IDBObjectStore::getKeyRequestSetup", "store_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBObjectStore::getKey", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBObjectStore::getKey");
   if (IsDeleted()) {
     exception_state.ThrowDOMException(
         kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -223,8 +221,7 @@
                                    ExceptionState& exception_state) {
   IDB_TRACE1("IDBObjectStore::getAllRequestSetup", "store_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBObjectStore::getAll", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBObjectStore::getAll");
   if (!max_count)
     max_count = std::numeric_limits<uint32_t>::max();
 
@@ -270,8 +267,7 @@
                                        ExceptionState& exception_state) {
   IDB_TRACE1("IDBObjectStore::getAllKeysRequestSetup", "store_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBObjectStore::getAllKeys", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBObjectStore::getAllKeys");
   if (!max_count)
     max_count = std::numeric_limits<uint32_t>::max();
 
@@ -391,7 +387,7 @@
       tracing_name = "IDBCursor::update";
       break;
   }
-  IDBRequest::AsyncTraceState metrics(tracing_name, this, ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics(tracing_name);
   if (IsDeleted()) {
     exception_state.ThrowDOMException(
         kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -551,8 +547,7 @@
                                            ExceptionState& exception_state) {
   IDB_TRACE1("IDBObjectStore::deleteRequestSetup", "store_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBObjectStore::delete", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBObjectStore::delete");
   if (IsDeleted()) {
     exception_state.ThrowDOMException(
         kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -595,8 +590,7 @@
 IDBRequest* IDBObjectStore::clear(ScriptState* script_state,
                                   ExceptionState& exception_state) {
   IDB_TRACE("IDBObjectStore::clearRequestSetup");
-  IDBRequest::AsyncTraceState metrics("IDBObjectStore::clear", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBObjectStore::clear");
   if (IsDeleted()) {
     exception_state.ThrowDOMException(
         kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -732,8 +726,7 @@
                                       ExceptionState& exception_state) {
   IDB_TRACE1("IDBObjectStore::createIndexRequestSetup", "store_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBObjectStore::createIndex", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBObjectStore::createIndex");
   if (!transaction_->IsVersionChange()) {
     exception_state.ThrowDOMException(
         kInvalidStateError,
@@ -886,8 +879,7 @@
                                        ExceptionState& exception_state) {
   IDB_TRACE1("IDBObjectStore::openCursorRequestSetup", "store_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBObjectStore::openCursor", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBObjectStore::openCursor");
   if (IsDeleted()) {
     exception_state.ThrowDOMException(
         kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -938,8 +930,7 @@
                                           ExceptionState& exception_state) {
   IDB_TRACE1("IDBObjectStore::openKeyCursorRequestSetup", "store_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBObjectStore::openKeyCursor", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBObjectStore::openKeyCursor");
   if (IsDeleted()) {
     exception_state.ThrowDOMException(
         kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
@@ -981,8 +972,7 @@
                                   ExceptionState& exception_state) {
   IDB_TRACE1("IDBObjectStore::countRequestSetup", "store_name",
              metadata_->name.Utf8());
-  IDBRequest::AsyncTraceState metrics("IDBObjectStore::count", this,
-                                      ++next_tracing_id_);
+  IDBRequest::AsyncTraceState metrics("IDBObjectStore::count");
   if (IsDeleted()) {
     exception_state.ThrowDOMException(
         kInvalidStateError, IDBDatabase::kObjectStoreDeletedErrorMessage);
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.h b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.h
index 99320e4..bf1abbc 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.h
@@ -219,8 +219,6 @@
   // after a transaction is finished, and can be cleared.
   IDBIndexMap index_map_;
 
-  int64_t next_tracing_id_ = 0;
-
 #if DCHECK_IS_ON()
   bool clear_index_cache_called_ = false;
 #endif  // DCHECK_IS_ON()
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
index 349a2fc..f4bcdbc 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
@@ -28,6 +28,7 @@
 
 #include "modules/indexeddb/IDBRequest.h"
 
+#include <atomic>
 #include <memory>
 #include <utility>
 
@@ -58,23 +59,38 @@
 
 namespace blink {
 
-IDBRequest::AsyncTraceState::AsyncTraceState(const char* tracing_name,
-                                             void* id,
-                                             size_t sub_id)
-    : tracing_name_(tracing_name), id_(static_cast<char*>(id) + sub_id) {
-  if (tracing_name_)
-    TRACE_EVENT_ASYNC_BEGIN0("IndexedDB", tracing_name_, id_);
+IDBRequest::AsyncTraceState::AsyncTraceState(const char* trace_event_name)
+    : trace_event_name_(nullptr) {
+  // If PopulateForNewEvent is called, it sets trace_event_name_ to
+  // trace_event_name. Otherwise, trace_event_name_ is nullptr, so this instance
+  // is considered empty. This roundabout initialization lets us avoid calling
+  // TRACE_EVENT_ASYNC_END0 with an uninitalized ID.
+  TRACE_EVENT_ASYNC_BEGIN0("IndexedDB", trace_event_name,
+                           PopulateForNewEvent(trace_event_name));
 }
 
 void IDBRequest::AsyncTraceState::RecordAndReset() {
-  if (tracing_name_)
-    TRACE_EVENT_ASYNC_END0("IndexedDB", tracing_name_, id_);
-  tracing_name_ = nullptr;
+  if (trace_event_name_) {
+    TRACE_EVENT_ASYNC_END0("IndexedDB", trace_event_name_, id_);
+    trace_event_name_ = nullptr;
+  }
 }
 
 IDBRequest::AsyncTraceState::~AsyncTraceState() {
-  if (tracing_name_)
-    TRACE_EVENT_ASYNC_END0("IndexedDB", tracing_name_, id_);
+  if (trace_event_name_)
+    TRACE_EVENT_ASYNC_END0("IndexedDB", trace_event_name_, id_);
+}
+
+size_t IDBRequest::AsyncTraceState::PopulateForNewEvent(
+    const char* trace_event_name) {
+  DCHECK(trace_event_name);
+  DCHECK(!trace_event_name_);
+  trace_event_name_ = trace_event_name;
+
+  static std::atomic<size_t> counter(0);
+  id_ = counter.fetch_add(1, std::memory_order_relaxed);
+
+  return id_;
 }
 
 IDBRequest* IDBRequest::Create(ScriptState* script_state,
@@ -102,7 +118,7 @@
       source_(source) {}
 
 IDBRequest::~IDBRequest() {
-  DCHECK((ready_state_ == DONE && !metrics_.is_valid()) ||
+  DCHECK((ready_state_ == DONE && metrics_.IsEmpty()) ||
          ready_state_ == kEarlyDeath || !GetExecutionContext());
 }
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h
index 9b2faeb0..a256a51 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h
@@ -68,31 +68,89 @@
   USING_GARBAGE_COLLECTED_MIXIN(IDBRequest);
 
  public:
-  // Records async tracing, starting on contruction and ending on destruction or
-  // a call to |RecordAndReset()|.
-  class AsyncTraceState {
+  // Container for async tracing state.
+  //
+  // The documentation for TRACE_EVENT_ASYNC_{BEGIN,END} suggests identifying
+  // trace events by using pointers or a counter that is always incremented on
+  // the same thread. This is not viable for IndexedDB, because the same object
+  // can result in multiple trace events (requests associated with cursors), and
+  // IndexedDB can be used from multiple threads in the same renderer (workers).
+  // Furthermore, we want to record the beginning event of an async trace right
+  // when we start serving an IDB API call, before the IDBRequest object is
+  // created, so we can't rely on information in an IDBRequest.
+  //
+  // This class solves the ID uniqueness problem by relying on an atomic counter
+  // to generating unique IDs in a threadsafe manner. The atomic machinery is
+  // used when tracing is enabled. The recording problem is solved by having
+  // instances of this class store the information needed to record async trace
+  // end events (via TRACE_EVENT_ASYNC_END).
+  //
+  // From a mechanical perspective, creating an AsyncTraceState instance records
+  // the beginning event of an async trace. The instance is then moved into an
+  // IDBRequest, which records the async trace's end event at the right time.
+  class MODULES_EXPORT AsyncTraceState {
    public:
-    AsyncTraceState() {}
-    AsyncTraceState(const char* tracing_name, void*, size_t sub_id);
+    // Creates an empty instance, which does not produce any tracing events.
+    //
+    // This is used for internal requests that should not show up in an
+    // application's trace. Examples of internal requests are the requests
+    // issued by DevTools, and the requests used to populate indexes.
+    explicit AsyncTraceState() {}
+
+    // Creates an instance that produces begin/end events with the given name.
+    //
+    // The string pointed to by tracing_name argument must live for the entire
+    // application. The easiest way to meet this requirement is to have it be a
+    // string literal.
+    explicit AsyncTraceState(const char* trace_event_name);
     ~AsyncTraceState();
+
+    // Used to transfer the trace end event state to an IDBRequest.
     AsyncTraceState(AsyncTraceState&& other) {
-      this->tracing_name_ = other.tracing_name_;
+      DCHECK(IsEmpty());
+      this->trace_event_name_ = other.trace_event_name_;
       this->id_ = other.id_;
-      other.tracing_name_ = nullptr;
+      other.trace_event_name_ = nullptr;
     }
     AsyncTraceState& operator=(AsyncTraceState&& rhs) {
-      this->tracing_name_ = rhs.tracing_name_;
+      DCHECK(IsEmpty());
+      this->trace_event_name_ = rhs.trace_event_name_;
       this->id_ = rhs.id_;
-      rhs.tracing_name_ = nullptr;
+      rhs.trace_event_name_ = nullptr;
       return *this;
     }
 
-    bool is_valid() const { return tracing_name_; }
+    // True if this instance does not store information for a tracing end event.
+    //
+    // An instance is cleared when RecordAndReset() is called on it, or when its
+    // state is moved into a different instance. Empty instances are also
+    // produced by the AsyncStateTrace() constructor.
+    bool IsEmpty() const { return !trace_event_name_; }
+
+    // Records the trace end event whose information is stored in this instance.
+    //
+    // The method results in the completion of the async trace tracked by this
+    // instance, so the instance is cleared.
     void RecordAndReset();
 
+   protected:  // For testing
+    const char* trace_event_name() const { return trace_event_name_; }
+    size_t id() const { return id_; }
+
+    // Populates the instance with state for a new async trace.
+    //
+    // The method uses the given even name and generates a new unique ID. The
+    // newly generated unique ID is returned.
+    size_t PopulateForNewEvent(const char* trace_event_name);
+
    private:
-    const char* tracing_name_ = nullptr;
-    const void* id_;
+    // The name of the async trace events tracked by this instance.
+    //
+    // Null is used to signal that the instance is empty, so the event name
+    // cannot be null.
+    const char* trace_event_name_ = nullptr;
+    // Uniquely generated ID that ties an async trace's begin and end events.
+    size_t id_;
 
     DISALLOW_COPY_AND_ASSIGN(AsyncTraceState);
   };
@@ -253,7 +311,7 @@
 #endif  // DCHECK_IS_ON()
 
   void AssignNewMetrics(AsyncTraceState metrics) {
-    DCHECK(!metrics_.is_valid());
+    DCHECK(metrics_.IsEmpty());
     metrics_ = std::move(metrics);
   }
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequestTest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBRequestTest.cpp
index 1fcf203c..f6f063b 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequestTest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequestTest.cpp
@@ -303,5 +303,84 @@
   }
 }
 
+// Expose private state for testing.
+class AsyncTraceStateForTesting : public IDBRequest::AsyncTraceState {
+ public:
+  AsyncTraceStateForTesting() : IDBRequest::AsyncTraceState() {}
+  AsyncTraceStateForTesting(AsyncTraceStateForTesting&& other)
+      : IDBRequest::AsyncTraceState(std::move(other)) {}
+  AsyncTraceStateForTesting& operator=(AsyncTraceStateForTesting&& rhs) {
+    AsyncTraceState::operator=(std::move(rhs));
+    return *this;
+  }
+
+  const char* trace_event_name() const {
+    return IDBRequest::AsyncTraceState::trace_event_name();
+  }
+  size_t id() const { return IDBRequest::AsyncTraceState::id(); }
+
+  size_t PopulateForNewEvent(const char* trace_event_name) {
+    return IDBRequest::AsyncTraceState::PopulateForNewEvent(trace_event_name);
+  }
+};
+
+TEST(IDBRequestAsyncTraceStateTest, EmptyConstructor) {
+  AsyncTraceStateForTesting state;
+
+  EXPECT_EQ(nullptr, state.trace_event_name());
+  EXPECT_TRUE(state.IsEmpty());
+}
+
+TEST(IDBRequestAsyncTraceStateTest, PopulateForNewEvent) {
+  AsyncTraceStateForTesting state1, state2, state3;
+
+  const char* name1 = "event1";
+  size_t id1 = state1.PopulateForNewEvent(name1);
+  const char* name2 = "event2";
+  size_t id2 = state2.PopulateForNewEvent(name2);
+  const char* name3 = "event3";
+  size_t id3 = state3.PopulateForNewEvent(name3);
+
+  EXPECT_EQ(name1, state1.trace_event_name());
+  EXPECT_EQ(name2, state2.trace_event_name());
+  EXPECT_EQ(name3, state3.trace_event_name());
+  EXPECT_EQ(id1, state1.id());
+  EXPECT_EQ(id2, state2.id());
+  EXPECT_EQ(id3, state3.id());
+
+  EXPECT_NE(id1, id2);
+  EXPECT_NE(id1, id3);
+  EXPECT_NE(id2, id3);
+
+  EXPECT_TRUE(!state1.IsEmpty());
+  EXPECT_TRUE(!state2.IsEmpty());
+  EXPECT_TRUE(!state3.IsEmpty());
+}
+
+TEST(IDBRequestAsyncTraceStateTest, MoveConstructor) {
+  AsyncTraceStateForTesting source_state;
+  const char* event_name = "event_name";
+  size_t id = source_state.PopulateForNewEvent(event_name);
+
+  AsyncTraceStateForTesting state(std::move(source_state));
+  EXPECT_EQ(event_name, state.trace_event_name());
+  EXPECT_EQ(id, state.id());
+  EXPECT_TRUE(source_state.IsEmpty());
+}
+
+TEST(IDBRequestAsyncTraceStateTest, MoveAssignment) {
+  AsyncTraceStateForTesting source_state;
+  const char* event_name = "event_name";
+  size_t id = source_state.PopulateForNewEvent(event_name);
+
+  AsyncTraceStateForTesting state;
+
+  EXPECT_TRUE(state.IsEmpty());
+  state = std::move(source_state);
+  EXPECT_EQ(event_name, state.trace_event_name());
+  EXPECT_EQ(id, state.id());
+  EXPECT_TRUE(source_state.IsEmpty());
+}
+
 }  // namespace
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/payments/BUILD.gn b/third_party/WebKit/Source/modules/payments/BUILD.gn
index 79eb3f58..8dd3cc7 100644
--- a/third_party/WebKit/Source/modules/payments/BUILD.gn
+++ b/third_party/WebKit/Source/modules/payments/BUILD.gn
@@ -16,6 +16,8 @@
     "PaymentAppServiceWorkerRegistration.cpp",
     "PaymentAppServiceWorkerRegistration.h",
     "PaymentCompleter.h",
+    "PaymentEventDataConversion.cpp",
+    "PaymentEventDataConversion.h",
     "PaymentInstruments.cpp",
     "PaymentInstruments.h",
     "PaymentManager.cpp",
@@ -24,8 +26,6 @@
     "PaymentRequest.h",
     "PaymentRequestEvent.cpp",
     "PaymentRequestEvent.h",
-    "PaymentRequestEventDataConversion.cpp",
-    "PaymentRequestEventDataConversion.h",
     "PaymentRequestRespondWithObserver.cpp",
     "PaymentRequestRespondWithObserver.h",
     "PaymentRequestUpdateEvent.cpp",
diff --git a/third_party/WebKit/Source/modules/payments/PaymentEventDataConversion.cpp b/third_party/WebKit/Source/modules/payments/PaymentEventDataConversion.cpp
new file mode 100644
index 0000000..fed8f8f
--- /dev/null
+++ b/third_party/WebKit/Source/modules/payments/PaymentEventDataConversion.cpp
@@ -0,0 +1,141 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "modules/payments/PaymentEventDataConversion.h"
+
+#include "bindings/core/v8/ToV8ForCore.h"
+#include "modules/payments/PaymentCurrencyAmount.h"
+#include "modules/payments/PaymentDetailsModifier.h"
+#include "modules/payments/PaymentItem.h"
+#include "modules/payments/PaymentMethodData.h"
+#include "modules/payments/PaymentRequestEventInit.h"
+#include "platform/bindings/ScriptState.h"
+#include "public/platform/modules/payments/WebPaymentMethodData.h"
+#include "public/platform/modules/payments/WebPaymentRequestEventData.h"
+
+namespace blink {
+namespace {
+
+PaymentCurrencyAmount ToPaymentCurrencyAmount(
+    const WebPaymentCurrencyAmount& web_amount) {
+  PaymentCurrencyAmount amount;
+  amount.setCurrency(web_amount.currency);
+  amount.setValue(web_amount.value);
+  amount.setCurrencySystem(web_amount.currency_system);
+  return amount;
+}
+
+PaymentItem ToPaymentItem(const WebPaymentItem& web_item) {
+  PaymentItem item;
+  item.setLabel(web_item.label);
+  item.setAmount(ToPaymentCurrencyAmount(web_item.amount));
+  item.setPending(web_item.pending);
+  return item;
+}
+
+PaymentDetailsModifier ToPaymentDetailsModifier(
+    ScriptState* script_state,
+    const WebPaymentDetailsModifier& web_modifier) {
+  PaymentDetailsModifier modifier;
+  Vector<String> supported_methods;
+  for (const auto& web_method : web_modifier.supported_methods) {
+    supported_methods.push_back(web_method);
+  }
+  modifier.setSupportedMethods(supported_methods);
+  modifier.setTotal(ToPaymentItem(web_modifier.total));
+  HeapVector<PaymentItem> additional_display_items;
+  for (const auto& web_item : web_modifier.additional_display_items) {
+    additional_display_items.push_back(ToPaymentItem(web_item));
+  }
+  modifier.setAdditionalDisplayItems(additional_display_items);
+  return modifier;
+}
+
+ScriptValue StringDataToScriptValue(ScriptState* script_state,
+                                    const WebString& stringified_data) {
+  if (!script_state->ContextIsValid())
+    return ScriptValue();
+
+  ScriptState::Scope scope(script_state);
+  v8::Local<v8::Value> v8_value;
+  if (!v8::JSON::Parse(script_state->GetIsolate(),
+                       V8String(script_state->GetIsolate(), stringified_data))
+           .ToLocal(&v8_value)) {
+    return ScriptValue();
+  }
+  return ScriptValue(script_state, v8_value);
+}
+
+PaymentMethodData ToPaymentMethodData(
+    ScriptState* script_state,
+    const WebPaymentMethodData& web_method_data) {
+  PaymentMethodData method_data;
+  Vector<String> supported_methods;
+  for (const auto& method : web_method_data.supported_methods) {
+    supported_methods.push_back(method);
+  }
+  method_data.setSupportedMethods(supported_methods);
+  method_data.setData(
+      StringDataToScriptValue(script_state, web_method_data.stringified_data));
+  return method_data;
+}
+
+}  // namespace
+
+PaymentRequestEventInit PaymentEventDataConversion::ToPaymentRequestEventInit(
+    ScriptState* script_state,
+    const WebPaymentRequestEventData& web_event_data) {
+  DCHECK(script_state);
+
+  PaymentRequestEventInit event_data;
+  if (!script_state->ContextIsValid())
+    return event_data;
+
+  ScriptState::Scope scope(script_state);
+
+  event_data.setTopLevelOrigin(web_event_data.top_level_origin);
+  event_data.setPaymentRequestOrigin(web_event_data.payment_request_origin);
+  event_data.setPaymentRequestId(web_event_data.payment_request_id);
+  HeapVector<PaymentMethodData> method_data;
+  for (const auto& md : web_event_data.method_data) {
+    method_data.push_back(ToPaymentMethodData(script_state, md));
+  }
+  event_data.setMethodData(method_data);
+  event_data.setTotal(ToPaymentItem(web_event_data.total));
+  HeapVector<PaymentDetailsModifier> modifiers;
+  for (const auto& modifier : web_event_data.modifiers) {
+    modifiers.push_back(ToPaymentDetailsModifier(script_state, modifier));
+  }
+  event_data.setModifiers(modifiers);
+  event_data.setInstrumentKey(web_event_data.instrument_key);
+  return event_data;
+}
+
+CanMakePaymentEventInit PaymentEventDataConversion::ToCanMakePaymentEventInit(
+    ScriptState* script_state,
+    const WebCanMakePaymentEventData& web_event_data) {
+  DCHECK(script_state);
+
+  CanMakePaymentEventInit event_data;
+  if (!script_state->ContextIsValid())
+    return event_data;
+
+  ScriptState::Scope scope(script_state);
+
+  event_data.setTopLevelOrigin(web_event_data.top_level_origin);
+  event_data.setPaymentRequestOrigin(web_event_data.payment_request_origin);
+  HeapVector<PaymentMethodData> method_data;
+  for (const auto& md : web_event_data.method_data) {
+    method_data.push_back(ToPaymentMethodData(script_state, md));
+  }
+  event_data.setMethodData(method_data);
+  HeapVector<PaymentDetailsModifier> modifiers;
+  for (const auto& modifier : web_event_data.modifiers) {
+    modifiers.push_back(ToPaymentDetailsModifier(script_state, modifier));
+  }
+  event_data.setModifiers(modifiers);
+  return event_data;
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/modules/payments/PaymentEventDataConversion.h b/third_party/WebKit/Source/modules/payments/PaymentEventDataConversion.h
new file mode 100644
index 0000000..3fd7153
--- /dev/null
+++ b/third_party/WebKit/Source/modules/payments/PaymentEventDataConversion.h
@@ -0,0 +1,32 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PaymentEventDataConversion_h
+#define PaymentEventDataConversion_h
+
+#include "modules/payments/CanMakePaymentEventInit.h"
+#include "modules/payments/PaymentRequestEventInit.h"
+#include "platform/wtf/Allocator.h"
+
+namespace blink {
+
+class ScriptState;
+struct WebCanMakePaymentEventData;
+struct WebPaymentRequestEventData;
+
+class MODULES_EXPORT PaymentEventDataConversion {
+  STATIC_ONLY(PaymentEventDataConversion);
+
+ public:
+  static CanMakePaymentEventInit ToCanMakePaymentEventInit(
+      ScriptState*,
+      const WebCanMakePaymentEventData&);
+  static PaymentRequestEventInit ToPaymentRequestEventInit(
+      ScriptState*,
+      const WebPaymentRequestEventData&);
+};
+
+}  // namespace blink
+
+#endif  // PaymentEventDataConversion_h
diff --git a/third_party/WebKit/Source/modules/payments/PaymentEventDataConversionTest.cpp b/third_party/WebKit/Source/modules/payments/PaymentEventDataConversionTest.cpp
new file mode 100644
index 0000000..596f245b
--- /dev/null
+++ b/third_party/WebKit/Source/modules/payments/PaymentEventDataConversionTest.cpp
@@ -0,0 +1,133 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "modules/payments/PaymentEventDataConversion.h"
+
+#include "bindings/core/v8/ScriptValue.h"
+#include "bindings/core/v8/V8BindingForCore.h"
+#include "bindings/core/v8/V8BindingForTesting.h"
+#include "platform/bindings/ScriptState.h"
+#include "public/platform/modules/payments/WebPaymentRequestEventData.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace blink {
+namespace {
+
+static WebPaymentItem CreateWebPaymentItemForTest() {
+  WebPaymentItem web_item;
+  web_item.label = WebString::FromUTF8("Label");
+  web_item.amount.currency = WebString::FromUTF8("USD");
+  web_item.amount.value = WebString::FromUTF8("9.99");
+  return web_item;
+}
+
+static WebPaymentMethodData CreateWebPaymentMethodDataForTest() {
+  WebPaymentMethodData web_method_data;
+  WebString method = WebString::FromUTF8("foo");
+  web_method_data.supported_methods = WebVector<WebString>(&method, 1);
+  web_method_data.stringified_data = "{\"merchantId\":\"12345\"}";
+  return web_method_data;
+}
+
+static WebCanMakePaymentEventData CreateWebCanMakePaymentEventDataForTest() {
+  WebCanMakePaymentEventData web_data;
+  web_data.top_level_origin = WebString::FromUTF8("https://example.com");
+  web_data.payment_request_origin = WebString::FromUTF8("https://example.com");
+  Vector<WebPaymentMethodData> method_data;
+  method_data.push_back(CreateWebPaymentMethodDataForTest());
+  web_data.method_data = WebVector<WebPaymentMethodData>(method_data);
+  return web_data;
+}
+
+static WebPaymentRequestEventData CreateWebPaymentRequestEventDataForTest() {
+  WebPaymentRequestEventData web_data;
+  web_data.top_level_origin = WebString::FromUTF8("https://example.com");
+  web_data.payment_request_origin = WebString::FromUTF8("https://example.com");
+  web_data.payment_request_id = WebString::FromUTF8("payment-request-id");
+  Vector<WebPaymentMethodData> method_data;
+  method_data.push_back(CreateWebPaymentMethodDataForTest());
+  web_data.method_data = WebVector<WebPaymentMethodData>(method_data);
+  web_data.total = CreateWebPaymentItemForTest();
+  web_data.instrument_key = WebString::FromUTF8("payment-instrument-key");
+  return web_data;
+}
+
+TEST(PaymentEventDataConversionTest, ToCanMakePaymentEventData) {
+  V8TestingScope scope;
+  WebCanMakePaymentEventData web_data =
+      CreateWebCanMakePaymentEventDataForTest();
+  CanMakePaymentEventInit data =
+      PaymentEventDataConversion::ToCanMakePaymentEventInit(
+          scope.GetScriptState(), web_data);
+
+  ASSERT_TRUE(data.hasTopLevelOrigin());
+  EXPECT_EQ("https://example.com", data.topLevelOrigin());
+
+  ASSERT_TRUE(data.hasPaymentRequestOrigin());
+  EXPECT_EQ("https://example.com", data.paymentRequestOrigin());
+
+  ASSERT_TRUE(data.hasMethodData());
+  ASSERT_EQ(1UL, data.methodData().size());
+  ASSERT_TRUE(data.methodData().front().hasSupportedMethods());
+  ASSERT_EQ(1UL, data.methodData().front().supportedMethods().size());
+  ASSERT_EQ("foo", data.methodData().front().supportedMethods().front());
+  ASSERT_TRUE(data.methodData().front().hasData());
+  ASSERT_TRUE(data.methodData().front().data().IsObject());
+  String stringified_data = V8StringToWebCoreString<String>(
+      v8::JSON::Stringify(
+          scope.GetContext(),
+          data.methodData().front().data().V8Value().As<v8::Object>())
+          .ToLocalChecked(),
+      kDoNotExternalize);
+  EXPECT_EQ("{\"merchantId\":\"12345\"}", stringified_data);
+}
+
+TEST(PaymentEventDataConversionTest, ToPaymentRequestEventData) {
+  V8TestingScope scope;
+  WebPaymentRequestEventData web_data =
+      CreateWebPaymentRequestEventDataForTest();
+  PaymentRequestEventInit data =
+      PaymentEventDataConversion::ToPaymentRequestEventInit(
+          scope.GetScriptState(), web_data);
+
+  ASSERT_TRUE(data.hasTopLevelOrigin());
+  EXPECT_EQ("https://example.com", data.topLevelOrigin());
+
+  ASSERT_TRUE(data.hasPaymentRequestOrigin());
+  EXPECT_EQ("https://example.com", data.paymentRequestOrigin());
+
+  ASSERT_TRUE(data.hasPaymentRequestId());
+  EXPECT_EQ("payment-request-id", data.paymentRequestId());
+
+  ASSERT_TRUE(data.hasMethodData());
+  ASSERT_EQ(1UL, data.methodData().size());
+  ASSERT_TRUE(data.methodData().front().hasSupportedMethods());
+  ASSERT_EQ(1UL, data.methodData().front().supportedMethods().size());
+  ASSERT_EQ("foo", data.methodData().front().supportedMethods().front());
+  ASSERT_TRUE(data.methodData().front().hasData());
+  ASSERT_TRUE(data.methodData().front().data().IsObject());
+  String stringified_data = V8StringToWebCoreString<String>(
+      v8::JSON::Stringify(
+          scope.GetContext(),
+          data.methodData().front().data().V8Value().As<v8::Object>())
+          .ToLocalChecked(),
+      kDoNotExternalize);
+  EXPECT_EQ("{\"merchantId\":\"12345\"}", stringified_data);
+
+  ASSERT_TRUE(data.hasTotal());
+  ASSERT_TRUE(data.total().hasLabel());
+  EXPECT_EQ("Label", data.total().label());
+  ASSERT_TRUE(data.total().hasAmount());
+  ASSERT_TRUE(data.total().amount().hasCurrency());
+  EXPECT_EQ("USD", data.total().amount().currency());
+  ASSERT_TRUE(data.total().amount().hasValue());
+  EXPECT_EQ("9.99", data.total().amount().value());
+
+  ASSERT_TRUE(data.hasInstrumentKey());
+  EXPECT_EQ("payment-instrument-key", data.instrumentKey());
+}
+
+}  // namespace
+}  // namespace blink
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequestEventDataConversion.cpp b/third_party/WebKit/Source/modules/payments/PaymentRequestEventDataConversion.cpp
deleted file mode 100644
index 6e7997c..0000000
--- a/third_party/WebKit/Source/modules/payments/PaymentRequestEventDataConversion.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "modules/payments/PaymentRequestEventDataConversion.h"
-
-#include "bindings/core/v8/ToV8ForCore.h"
-#include "modules/payments/PaymentCurrencyAmount.h"
-#include "modules/payments/PaymentDetailsModifier.h"
-#include "modules/payments/PaymentItem.h"
-#include "modules/payments/PaymentMethodData.h"
-#include "modules/payments/PaymentRequestEventInit.h"
-#include "platform/bindings/ScriptState.h"
-#include "public/platform/modules/payments/WebPaymentMethodData.h"
-#include "public/platform/modules/payments/WebPaymentRequestEventData.h"
-
-namespace blink {
-namespace {
-
-PaymentCurrencyAmount ToPaymentCurrencyAmount(
-    const WebPaymentCurrencyAmount& web_amount) {
-  PaymentCurrencyAmount amount;
-  amount.setCurrency(web_amount.currency);
-  amount.setValue(web_amount.value);
-  amount.setCurrencySystem(web_amount.currency_system);
-  return amount;
-}
-
-PaymentItem ToPaymentItem(const WebPaymentItem& web_item) {
-  PaymentItem item;
-  item.setLabel(web_item.label);
-  item.setAmount(ToPaymentCurrencyAmount(web_item.amount));
-  item.setPending(web_item.pending);
-  return item;
-}
-
-PaymentDetailsModifier ToPaymentDetailsModifier(
-    ScriptState* script_state,
-    const WebPaymentDetailsModifier& web_modifier) {
-  PaymentDetailsModifier modifier;
-  Vector<String> supported_methods;
-  for (const auto& web_method : web_modifier.supported_methods) {
-    supported_methods.push_back(web_method);
-  }
-  modifier.setSupportedMethods(supported_methods);
-  modifier.setTotal(ToPaymentItem(web_modifier.total));
-  HeapVector<PaymentItem> additional_display_items;
-  for (const auto& web_item : web_modifier.additional_display_items) {
-    additional_display_items.push_back(ToPaymentItem(web_item));
-  }
-  modifier.setAdditionalDisplayItems(additional_display_items);
-  return modifier;
-}
-
-ScriptValue StringDataToScriptValue(ScriptState* script_state,
-                                    const WebString& stringified_data) {
-  if (!script_state->ContextIsValid())
-    return ScriptValue();
-
-  ScriptState::Scope scope(script_state);
-  v8::Local<v8::Value> v8_value;
-  if (!v8::JSON::Parse(script_state->GetIsolate(),
-                       V8String(script_state->GetIsolate(), stringified_data))
-           .ToLocal(&v8_value)) {
-    return ScriptValue();
-  }
-  return ScriptValue(script_state, v8_value);
-}
-
-PaymentMethodData ToPaymentMethodData(
-    ScriptState* script_state,
-    const WebPaymentMethodData& web_method_data) {
-  PaymentMethodData method_data;
-  Vector<String> supported_methods;
-  for (const auto& method : web_method_data.supported_methods) {
-    supported_methods.push_back(method);
-  }
-  method_data.setSupportedMethods(supported_methods);
-  method_data.setData(
-      StringDataToScriptValue(script_state, web_method_data.stringified_data));
-  return method_data;
-}
-
-}  // namespace
-
-PaymentRequestEventInit
-PaymentRequestEventDataConversion::ToPaymentRequestEventInit(
-    ScriptState* script_state,
-    const WebPaymentRequestEventData& web_event_data) {
-  DCHECK(script_state);
-
-  PaymentRequestEventInit event_data;
-  if (!script_state->ContextIsValid())
-    return event_data;
-
-  ScriptState::Scope scope(script_state);
-
-  event_data.setTopLevelOrigin(web_event_data.top_level_origin);
-  event_data.setPaymentRequestOrigin(web_event_data.payment_request_origin);
-  event_data.setPaymentRequestId(web_event_data.payment_request_id);
-  HeapVector<PaymentMethodData> method_data;
-  for (const auto& md : web_event_data.method_data) {
-    method_data.push_back(ToPaymentMethodData(script_state, md));
-  }
-  event_data.setMethodData(method_data);
-  event_data.setTotal(ToPaymentItem(web_event_data.total));
-  HeapVector<PaymentDetailsModifier> modifiers;
-  for (const auto& modifier : web_event_data.modifiers) {
-    modifiers.push_back(ToPaymentDetailsModifier(script_state, modifier));
-  }
-  event_data.setModifiers(modifiers);
-  event_data.setInstrumentKey(web_event_data.instrument_key);
-  return event_data;
-}
-
-}  // namespace blink
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequestEventDataConversion.h b/third_party/WebKit/Source/modules/payments/PaymentRequestEventDataConversion.h
deleted file mode 100644
index d142b2ff..0000000
--- a/third_party/WebKit/Source/modules/payments/PaymentRequestEventDataConversion.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef PaymentRequestEventDataConversion_h
-#define PaymentRequestEventDataConversion_h
-
-#include "modules/payments/PaymentRequestEventInit.h"
-#include "platform/wtf/Allocator.h"
-
-namespace blink {
-
-class ScriptState;
-struct WebPaymentRequestEventData;
-
-class MODULES_EXPORT PaymentRequestEventDataConversion {
-  STATIC_ONLY(PaymentRequestEventDataConversion);
-
- public:
-  static PaymentRequestEventInit ToPaymentRequestEventInit(
-      ScriptState*,
-      const WebPaymentRequestEventData&);
-};
-
-}  // namespace blink
-
-#endif  // PaymentRequestEventDataConversion_h
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequestEventDataConversionTest.cpp b/third_party/WebKit/Source/modules/payments/PaymentRequestEventDataConversionTest.cpp
deleted file mode 100644
index cfc81e74..0000000
--- a/third_party/WebKit/Source/modules/payments/PaymentRequestEventDataConversionTest.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "modules/payments/PaymentRequestEventDataConversion.h"
-
-#include "bindings/core/v8/ScriptValue.h"
-#include "bindings/core/v8/V8BindingForCore.h"
-#include "bindings/core/v8/V8BindingForTesting.h"
-#include "platform/bindings/ScriptState.h"
-#include "public/platform/modules/payments/WebPaymentRequestEventData.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace blink {
-namespace {
-
-static WebPaymentItem CreateWebPaymentItemForTest() {
-  WebPaymentItem web_item;
-  web_item.label = WebString::FromUTF8("Label");
-  web_item.amount.currency = WebString::FromUTF8("USD");
-  web_item.amount.value = WebString::FromUTF8("9.99");
-  return web_item;
-}
-
-static WebPaymentMethodData CreateWebPaymentMethodDataForTest() {
-  WebPaymentMethodData web_method_data;
-  WebString method = WebString::FromUTF8("foo");
-  web_method_data.supported_methods = WebVector<WebString>(&method, 1);
-  web_method_data.stringified_data = "{\"merchantId\":\"12345\"}";
-  return web_method_data;
-}
-
-static WebPaymentRequestEventData CreateWebPaymentRequestEventDataForTest() {
-  WebPaymentRequestEventData web_data;
-  web_data.top_level_origin = WebString::FromUTF8("https://example.com");
-  web_data.payment_request_origin = WebString::FromUTF8("https://example.com");
-  web_data.payment_request_id = WebString::FromUTF8("payment-request-id");
-  Vector<WebPaymentMethodData> method_data;
-  method_data.push_back(CreateWebPaymentMethodDataForTest());
-  web_data.method_data = WebVector<WebPaymentMethodData>(method_data);
-  web_data.total = CreateWebPaymentItemForTest();
-  web_data.instrument_key = WebString::FromUTF8("payment-instrument-key");
-  return web_data;
-}
-
-TEST(PaymentRequestEventDataConversionTest, ToPaymentRequestEventData) {
-  V8TestingScope scope;
-  WebPaymentRequestEventData web_data =
-      CreateWebPaymentRequestEventDataForTest();
-  PaymentRequestEventInit data =
-      PaymentRequestEventDataConversion::ToPaymentRequestEventInit(
-          scope.GetScriptState(), web_data);
-
-  ASSERT_TRUE(data.hasTopLevelOrigin());
-  EXPECT_EQ("https://example.com", data.topLevelOrigin());
-
-  ASSERT_TRUE(data.hasPaymentRequestOrigin());
-  EXPECT_EQ("https://example.com", data.paymentRequestOrigin());
-
-  ASSERT_TRUE(data.hasPaymentRequestId());
-  EXPECT_EQ("payment-request-id", data.paymentRequestId());
-
-  ASSERT_TRUE(data.hasMethodData());
-  ASSERT_EQ(1UL, data.methodData().size());
-  ASSERT_TRUE(data.methodData().front().hasSupportedMethods());
-  ASSERT_EQ(1UL, data.methodData().front().supportedMethods().size());
-  ASSERT_EQ("foo", data.methodData().front().supportedMethods().front());
-  ASSERT_TRUE(data.methodData().front().hasData());
-  ASSERT_TRUE(data.methodData().front().data().IsObject());
-  String stringified_data = V8StringToWebCoreString<String>(
-      v8::JSON::Stringify(
-          scope.GetContext(),
-          data.methodData().front().data().V8Value().As<v8::Object>())
-          .ToLocalChecked(),
-      kDoNotExternalize);
-  EXPECT_EQ("{\"merchantId\":\"12345\"}", stringified_data);
-
-  ASSERT_TRUE(data.hasTotal());
-  ASSERT_TRUE(data.total().hasLabel());
-  EXPECT_EQ("Label", data.total().label());
-  ASSERT_TRUE(data.total().hasAmount());
-  ASSERT_TRUE(data.total().amount().hasCurrency());
-  EXPECT_EQ("USD", data.total().amount().currency());
-  ASSERT_TRUE(data.total().amount().hasValue());
-  EXPECT_EQ("9.99", data.total().amount().value());
-
-  ASSERT_TRUE(data.hasInstrumentKey());
-  EXPECT_EQ("payment-instrument-key", data.instrumentKey());
-}
-
-}  // namespace
-}  // namespace blink
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeProxy.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeProxy.cpp
index e29973f..5b5c859 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeProxy.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeProxy.cpp
@@ -55,8 +55,8 @@
 #include "modules/notifications/Notification.h"
 #include "modules/notifications/NotificationEvent.h"
 #include "modules/notifications/NotificationEventInit.h"
+#include "modules/payments/PaymentEventDataConversion.h"
 #include "modules/payments/PaymentRequestEvent.h"
-#include "modules/payments/PaymentRequestEventDataConversion.h"
 #include "modules/payments/PaymentRequestEventInit.h"
 #include "modules/payments/PaymentRequestRespondWithObserver.h"
 #include "modules/push_messaging/PushEvent.h"
@@ -462,7 +462,7 @@
 
   Event* event = PaymentRequestEvent::Create(
       EventTypeNames::paymentrequest,
-      PaymentRequestEventDataConversion::ToPaymentRequestEventInit(
+      PaymentEventDataConversion::ToPaymentRequestEventInit(
           WorkerGlobalScope()->ScriptController()->GetScriptState(),
           web_app_request),
       respond_with_observer, wait_until_observer);
diff --git a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
index 9a68778..fa79b48 100644
--- a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
+++ b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
@@ -960,11 +960,6 @@
       status: "test",
     },
     {
-      name: "SlimmingPaintInvalidation",
-      implied_by: ["SlimmingPaintV2"],
-      status: "stable",
-    },
-    {
       name: "SlimmingPaintStrictCullRectClipping",
     },
     {
diff --git a/third_party/WebKit/Source/platform/audio/PushPullFIFO.cpp b/third_party/WebKit/Source/platform/audio/PushPullFIFO.cpp
index e23368f..5e87c4af 100644
--- a/third_party/WebKit/Source/platform/audio/PushPullFIFO.cpp
+++ b/third_party/WebKit/Source/platform/audio/PushPullFIFO.cpp
@@ -5,6 +5,7 @@
 #include "platform/audio/PushPullFIFO.h"
 
 #include <memory>
+#include "platform/Histogram.h"
 #include "platform/audio/AudioUtilities.h"
 #include "platform/wtf/PtrUtil.h"
 
@@ -24,7 +25,33 @@
   fifo_bus_ = AudioBus::Create(number_of_channels, fifo_length_);
 }
 
-PushPullFIFO::~PushPullFIFO() {}
+PushPullFIFO::~PushPullFIFO() {
+  // Capture metrics only after the FIFO is actually pulled.
+  if (pull_count_ == 0)
+    return;
+
+  // TODO(hongchan): The fast-shutdown process prevents the data below from
+  // being collected correctly. Consider using "outside metric collector" that
+  // survives the fast-shutdown.
+
+  // Capture the percentage of underflow happened based on the total pull count.
+  // (100 buckets of size 1) This is equivalent of
+  // "Media.AudioRendererMissedDeadline" metric for WebAudio.
+  DEFINE_STATIC_LOCAL(
+      LinearHistogram,
+      fifo_underflow_percentage_histogram,
+      ("WebAudio.PushPullFIFO.UnderflowPercentage", 1, 100, 101));
+  fifo_underflow_percentage_histogram.Count(
+      static_cast<int32_t>(100.0 * underflow_count_ / pull_count_));
+
+  // We only collect the underflow count because no overflow can happen in the
+  // current implementation. This is similar to
+  // "Media.AudioRendererAudioGlitches" metric for WebAudio, which is a simple
+  // flag indicates any instance of glitches during FIFO's lifetime.
+  DEFINE_STATIC_LOCAL(BooleanHistogram, fifo_underflow_glitches_histogram,
+                      ("WebAudio.PushPullFIFO.UnderflowGlitches"));
+  fifo_underflow_glitches_histogram.Count(underflow_count_ > 0);
+}
 
 // Push the data from |input_bus| to FIFO. The size of push is determined by
 // the length of |input_bus|.
@@ -163,6 +190,8 @@
   frames_available_ -= frames_to_fill;
   DCHECK_EQ((index_read_ + frames_available_) % fifo_length_, index_write_);
 
+  pull_count_++;
+
   // |frames_requested > frames_available_| means the frames in FIFO is not
   // enough to fulfill the requested frames from the audio device.
   return frames_requested > frames_available_
diff --git a/third_party/WebKit/Source/platform/audio/PushPullFIFO.h b/third_party/WebKit/Source/platform/audio/PushPullFIFO.h
index 017d89683..9a92fa0f 100644
--- a/third_party/WebKit/Source/platform/audio/PushPullFIFO.h
+++ b/third_party/WebKit/Source/platform/audio/PushPullFIFO.h
@@ -82,6 +82,8 @@
   // The size of the FIFO.
   const size_t fifo_length_ = 0;
 
+  // For UMA reporting purpose.
+  unsigned pull_count_ = 0;
   unsigned overflow_count_ = 0;
   unsigned underflow_count_ = 0;
 
diff --git a/third_party/WebKit/Source/platform/exported/WebRuntimeFeatures.cpp b/third_party/WebKit/Source/platform/exported/WebRuntimeFeatures.cpp
index 584a51f7..8ab62d4 100644
--- a/third_party/WebKit/Source/platform/exported/WebRuntimeFeatures.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebRuntimeFeatures.cpp
@@ -252,10 +252,6 @@
   RuntimeEnabledFeatures::SetSlimmingPaintV2Enabled(enable);
 }
 
-void WebRuntimeFeatures::EnableSlimmingPaintInvalidation(bool enable) {
-  RuntimeEnabledFeatures::SetSlimmingPaintInvalidationEnabled(enable);
-}
-
 void WebRuntimeFeatures::EnableTouchEventFeatureDetection(bool enable) {
   RuntimeEnabledFeatures::SetTouchEventFeatureDetectionEnabled(enable);
 }
diff --git a/third_party/WebKit/Source/platform/geometry/LayoutRectOutsets.h b/third_party/WebKit/Source/platform/geometry/LayoutRectOutsets.h
index 15617ee..957cea4 100644
--- a/third_party/WebKit/Source/platform/geometry/LayoutRectOutsets.h
+++ b/third_party/WebKit/Source/platform/geometry/LayoutRectOutsets.h
@@ -106,6 +106,15 @@
   LayoutUnit left_;
 };
 
+inline LayoutRectOutsets& operator+=(LayoutRectOutsets& a,
+                                     const LayoutRectOutsets& b) {
+  a.SetTop(a.Top() + b.Top());
+  a.SetRight(a.Right() + b.Right());
+  a.SetBottom(a.Bottom() + b.Bottom());
+  a.SetLeft(a.Left() + b.Left());
+  return a;
+}
+
 }  // namespace blink
 
 #endif  // LayoutRectOutsets_h
diff --git a/third_party/WebKit/Source/platform/testing/RuntimeEnabledFeaturesTestHelpers.h b/third_party/WebKit/Source/platform/testing/RuntimeEnabledFeaturesTestHelpers.h
index 268c28f..0ddb902 100644
--- a/third_party/WebKit/Source/platform/testing/RuntimeEnabledFeaturesTestHelpers.h
+++ b/third_party/WebKit/Source/platform/testing/RuntimeEnabledFeaturesTestHelpers.h
@@ -49,10 +49,6 @@
     RuntimeEnabledFeatures::SetSlimmingPaintV2Enabled>
     ScopedSlimmingPaintV2ForTest;
 typedef ScopedRuntimeEnabledFeatureForTest<
-    RuntimeEnabledFeatures::SlimmingPaintInvalidationEnabled,
-    RuntimeEnabledFeatures::SetSlimmingPaintInvalidationEnabled>
-    ScopedSlimmingPaintInvalidationForTest;
-typedef ScopedRuntimeEnabledFeatureForTest<
     RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled,
     RuntimeEnabledFeatures::SetPaintUnderInvalidationCheckingEnabled>
     ScopedPaintUnderInvalidationCheckingForTest;
diff --git a/third_party/WebKit/Source/web/ChromeClientImpl.cpp b/third_party/WebKit/Source/web/ChromeClientImpl.cpp
index 1ae58e0..d2340f0 100644
--- a/third_party/WebKit/Source/web/ChromeClientImpl.cpp
+++ b/third_party/WebKit/Source/web/ChromeClientImpl.cpp
@@ -798,6 +798,16 @@
   return web_view_->PagePopupWindow();
 }
 
+void ChromeClientImpl::SetBrowserControlsState(float height,
+                                               bool shrinks_layout) {
+  WebSize size = web_view_->Size();
+  if (shrinks_layout)
+    size.height -= height;
+
+  web_view_->ResizeWithBrowserControls(
+      size, height, shrinks_layout);
+}
+
 bool ChromeClientImpl::ShouldOpenModalDialogDuringPageDismissal(
     LocalFrame& frame,
     DialogType dialog_type,
diff --git a/third_party/WebKit/Source/web/ChromeClientImpl.h b/third_party/WebKit/Source/web/ChromeClientImpl.h
index a769456..eaa386b 100644
--- a/third_party/WebKit/Source/web/ChromeClientImpl.h
+++ b/third_party/WebKit/Source/web/ChromeClientImpl.h
@@ -183,6 +183,8 @@
   void ClosePagePopup(PagePopup*) override;
   DOMWindow* PagePopupWindowForTesting() const override;
 
+  void SetBrowserControlsState(float height, bool shrinks_layout) override;
+
   bool ShouldOpenModalDialogDuringPageDismissal(
       LocalFrame&,
       DialogType,
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot.py
index 480cdc3..9bb83e6 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot.py
@@ -66,6 +66,7 @@
         the latest results.
         """
         if build_number:
+            assert str(build_number).isdigit(), 'expected numeric build number, got %s' % build_number
             url_base = self.builder_results_url_base(builder_name)
             return '%s/%s/layout-test-results' % (url_base, build_number)
         return self.accumulated_results_url_base(builder_name)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot_unittest.py
index 8729842..445f9b1 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot_unittest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/buildbot_unittest.py
@@ -48,6 +48,10 @@
             BuildBot().results_url('Test Builder', 10),
             'https://storage.googleapis.com/chromium-layout-test-archives/Test_Builder/10/layout-test-results')
 
+    def test_results_url_with_non_numeric_build_number(self):
+        with self.assertRaisesRegexp(AssertionError, 'expected numeric build number'):
+            BuildBot().results_url('Test Builder', 'ba5eba11')
+
     def test_builder_results_url_base(self):
         self.assertEqual(
             BuildBot().builder_results_url_base('WebKit Mac10.8 (dbg)'),
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl.py
index c5e5774..a9c92e0 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl.py
@@ -143,11 +143,14 @@
         url = result_dict['url']
         if url is None:
             return Build(builder_name, None)
-        match = re.match(r'.*/builds/(\d+)?$', url)
+        match = re.match(r'.*/builds/(\d+)/?$', url)
+        if match:
+            build_number = match.group(1)
+            return Build(builder_name, int(build_number))
+        match = re.match(r'.*/task/([0-9a-f]+)/?$', url)
         assert match, '%s did not match expected format' % url
-        build_number = match.group(1)
-        assert build_number and build_number.isdigit()
-        return Build(builder_name, int(build_number))
+        task_id = match.group(1)
+        return Build(builder_name, task_id)
 
     @staticmethod
     def _try_job_status(result_dict):
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_mock.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_mock.py
new file mode 100644
index 0000000..7b16a66d
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_mock.py
@@ -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.
+
+from webkitpy.common.net.buildbot import filter_latest_builds
+
+
+# TODO(qyearsley): Use this class in wpt_expectations_updater_unittest and rebaseline_cl_unittest.
+class MockGitCL(object):
+
+    def __init__(self, host, results=None):
+        self._host = host
+        self._results = results or {}
+        self.calls = []
+
+    def run(self, args):
+        self.calls.append(['git', 'cl'] + args)
+        return 'mock output'
+
+    def trigger_try_jobs(self, builders=None):
+        builders = builders or self._host.builders.all_try_builder_names()
+        command = ['try', '-m', 'tryserver.blink']
+        for builder in sorted(builders):
+            command.extend(['-b', builder])
+        self.run(command)
+
+    def get_issue_number(self):
+        return '1234'
+
+    def wait_for_try_jobs(self, **_):
+        return self._results
+
+    def latest_try_jobs(self, **_):
+        latest_builds = filter_latest_builds(self._results)
+        return {b: s for b, s in self._results.items() if b in latest_builds}
+
+    def try_job_results(self, **_):
+        return self._results
+
+    @staticmethod
+    def all_jobs_finished(results):
+        return all(s.status == 'COMPLETED' for s in results.values())
+
+    @staticmethod
+    def has_failing_try_results(results):
+        return any(s.result == 'FAILURE' for s in results.values())
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_unittest.py
index 2e20aa27d..79201f21b 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_unittest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/net/git_cl_unittest.py
@@ -177,7 +177,7 @@
                 Build('builder-b', 200): TryJobStatus('COMPLETED', 'FAILURE'),
             })
 
-    def test_try_job_results_no_build_number_in_url(self):
+    def test_try_job_results_with_task_id_in_url(self):
         git_cl = GitCL(MockHost())
         git_cl.fetch_raw_try_job_results = lambda: [
             {
@@ -188,9 +188,24 @@
                 'url': 'https://luci-milo.appspot.com/swarming/task/36a767f405d9ee10',
             },
         ]
-        # By default, we try to parse a build number from the URL, which
-        # fails for some URLs.
-        with self.assertRaisesRegexp(AssertionError, '36a767f405d9ee10 did not match'):
+        self.assertEqual(
+            git_cl.try_job_results(),
+            {Build('builder-a', '36a767f405d9ee10'): TryJobStatus('COMPLETED', 'FAILURE')})
+
+    def test_try_job_results_with_unexpected_url_format(self):
+        git_cl = GitCL(MockHost())
+        git_cl.fetch_raw_try_job_results = lambda: [
+            {
+                'builder_name': 'builder-a',
+                'status': 'COMPLETED',
+                'result': 'FAILURE',
+                'failure_reason': 'BUILD_FAILURE',
+                'url': 'https://example.com/',
+            },
+        ]
+        # We try to parse a build number or task ID from the URL.
+        with self.assertRaisesRegexp(AssertionError, 'https://example.com/ did not match expected format'):
             git_cl.try_job_results()
-        # If we explicitly don't care about that builder, then we ignore it.
+        # We ignore builders that we explicitly don't care about;
+        # in this case we only care about other-builder, not builder-a.
         self.assertEqual(git_cl.try_job_results(['other-builder']), {})
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common.py
index 1ed2f66b..bef45b6e 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common.py
@@ -18,6 +18,8 @@
 WPT_GH_SSH_URL_TEMPLATE = 'https://{}@github.com/%s/%s.git' % (WPT_GH_ORG, WPT_GH_REPO_NAME)
 WPT_REVISION_FOOTER = 'WPT-Export-Revision:'
 DEFAULT_COMMIT_HISTORY_WINDOW = 5000
+EXPORT_PR_LABEL = 'chromium-export'
+PROVISIONAL_PR_LABEL = 'do not merge yet'
 
 # TODO(qyearsley): This directory should be able to be constructed with
 # PathFinder and WPT_DEST_NAME, plus the string "external".
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/gerrit.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/gerrit.py
index 4d6894af6..d176add5 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/gerrit.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/gerrit.py
@@ -80,10 +80,6 @@
         return self._data['owner']['email']
 
     @property
-    def reviewers(self):
-        return self._data['reviewers']
-
-    @property
     def current_revision_sha(self):
         return self._data['current_revision']
 
@@ -91,6 +87,10 @@
     def current_revision(self):
         return self._data['revisions'][self.current_revision_sha]
 
+    @property
+    def has_review_started(self):
+        return self._data.get('has_review_started')
+
     def latest_commit_message_with_footers(self):
         return self.current_revision['commit_with_footers']
 
@@ -118,6 +118,9 @@
         if 'Import' in self.subject:
             return False
 
+        if 'No-Export: true' in self.current_revision['commit_with_footers']:
+            return False
+
         if 'NOEXPORT=true' in self.current_revision['commit_with_footers']:
             return False
 
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter.py
index a4c8460..6c894c8 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter.py
@@ -8,7 +8,9 @@
 from webkitpy.w3c.common import (
     exportable_commits_over_last_n_commits,
     WPT_GH_URL,
-    WPT_REVISION_FOOTER
+    WPT_REVISION_FOOTER,
+    EXPORT_PR_LABEL,
+    PROVISIONAL_PR_LABEL
 )
 from webkitpy.w3c.gerrit import GerritAPI, GerritCL
 from webkitpy.w3c.wpt_github import WPTGitHub, MergeError
@@ -53,8 +55,8 @@
         for cl in gerrit_cls:
             _log.info('Found Gerrit in-flight CL: "%s" %s', cl.subject, cl.url)
 
-            if not cl.reviewers:
-                _log.info('CL has no reviewers, skipping.')
+            if not cl.has_review_started:
+                _log.info('CL review has not started, skipping.')
                 continue
 
             # Check if CL already has a corresponding PR
@@ -87,6 +89,9 @@
             _log.info('[dry_run] Would have attempted to merge PR')
             return
 
+        _log.info('Removing provisional label...')
+        self.wpt_github.remove_label(pull_request.number, PROVISIONAL_PR_LABEL)
+
         _log.info('Attempting to merge...')
 
         # This is outside of the try block because if there's a problem communicating
@@ -170,7 +175,7 @@
         _log.info('Create PR response: %s', response_data)
 
         if response_data:
-            data, status_code = self.wpt_github.add_label(response_data['number'])
+            data, status_code = self.wpt_github.add_label(response_data['number'], EXPORT_PR_LABEL)
             _log.info('Add label response (status %s): %s', status_code, data)
 
         return response_data
@@ -219,8 +224,8 @@
             response_data = self.wpt_github.create_pr(branch_name, cl.subject, message)
             _log.debug('Create PR response: %s', response_data)
 
-            self.wpt_github.add_label(response_data['number'])
-            self.wpt_github.add_label(response_data['number'], 'do not merge yet')
+            self.wpt_github.add_label(response_data['number'], EXPORT_PR_LABEL)
+            self.wpt_github.add_label(response_data['number'], PROVISIONAL_PR_LABEL)
 
             cl.post_comment((
                 'Exportable changes to web-platform-tests were detected in this CL '
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py
index 04bcc5a64..3ca537b 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py
@@ -83,15 +83,15 @@
             'pr_with_position',
             'pr_with_change_id',
             'create_pr',
-            'add_label "default"',
+            'add_label "chromium-export"',
             'pr_with_position',
             'pr_with_change_id',
             'create_pr',
-            'add_label "default"',
+            'add_label "chromium-export"',
             'pr_with_position',
             'pr_with_change_id',
             'create_pr',
-            'add_label "default"',
+            'add_label "chromium-export"',
         ])
         self.assertEqual(test_exporter.wpt_github.pull_requests_created, [
             ('chromium-export-c881563d73', 'older fake text', 'older fake text'),
@@ -140,13 +140,15 @@
         test_exporter.run()
         self.assertEqual(test_exporter.wpt_github.calls, [
             'pr_with_position',
+            'remove_label "do not merge yet"',
             'get_pr_branch',
             'merge_pull_request',
             'pr_with_position',
             'create_pr',
-            'add_label "default"',
+            'add_label "chromium-export"',
             'pr_with_position',
             'pr_with_position',
+            'remove_label "do not merge yet"',
             'get_pr_branch',
             'merge_pull_request',
             'delete_remote_branch',
@@ -171,7 +173,7 @@
                 'subject': 'subject',
                 '_number': '1',
                 'current_revision': '1',
-                'reviewers': ['rutabaga'],
+                'has_review_started': True,
                 'revisions': {
                     '1': {'commit_with_footers': 'a commit with footers'}
                 },
@@ -182,7 +184,7 @@
         self.assertEqual(test_exporter.wpt_github.calls, [
             'pr_with_change_id',
             'create_pr',
-            'add_label "default"',
+            'add_label "chromium-export"',
             'add_label "do not merge yet"',
         ])
         self.assertEqual(test_exporter.wpt_github.pull_requests_created, [
@@ -207,7 +209,7 @@
                 'subject': 'subject',
                 '_number': '1',
                 'current_revision': '1',
-                'reviewers': ['rutabaga'],
+                'has_review_started': True,
                 'revisions': {
                     '1': {'commit_with_footers': 'a commit with footers'}
                 },
@@ -237,7 +239,7 @@
                 'subject': 'subject',
                 '_number': '1',
                 'current_revision': '2',
-                'reviewers': ['rutabaga'],
+                'has_review_started': True,
                 'revisions': {
                     '1': {
                         'commit_with_footers': 'a commit with footers 1',
@@ -287,6 +289,7 @@
         self.assertEqual(test_exporter.wpt_github.calls, [
             'pr_with_position',
             'pr_with_change_id',
+            'remove_label "do not merge yet"',
             'get_pr_branch',
             'merge_pull_request',
             'delete_remote_branch',
@@ -294,7 +297,7 @@
         self.assertEqual(test_exporter.wpt_github.pull_requests_created, [])
         self.assertEqual(test_exporter.wpt_github.pull_requests_merged, [1234])
 
-    def test_does_not_create_pr_if_cl_has_no_reviewers(self):
+    def test_does_not_create_pr_if_cl_review_has_not_started(self):
         host = MockHost()
         test_exporter = TestExporter(host, 'gh-username', 'gh-token', gerrit_user=None,
                                      gerrit_token=None, dry_run=False)
@@ -308,7 +311,7 @@
                 'subject': 'subject',
                 '_number': '1',
                 'current_revision': '2',
-                'reviewers': [],
+                'has_review_started': False,
                 'revisions': {
                     '1': {
                         'commit_with_footers': 'a commit with footers 1',
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
index e5edf8f..cdceff0 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
@@ -14,17 +14,17 @@
 import argparse
 import logging
 
-from webkitpy.common.net.git_cl import GitCL, TryJobStatus
 from webkitpy.common.net.buildbot import current_build_link
+from webkitpy.common.net.git_cl import GitCL, TryJobStatus
 from webkitpy.common.path_finder import PathFinder
 from webkitpy.layout_tests.models.test_expectations import TestExpectations, TestExpectationParser
 from webkitpy.layout_tests.port.base import Port
 from webkitpy.w3c.common import WPT_REPO_URL, WPT_DEST_NAME, read_credentials, exportable_commits_over_last_n_commits
 from webkitpy.w3c.directory_owners_extractor import DirectoryOwnersExtractor
 from webkitpy.w3c.local_wpt import LocalWPT
-from webkitpy.w3c.wpt_github import WPTGitHub
 from webkitpy.w3c.test_copier import TestCopier
 from webkitpy.w3c.wpt_expectations_updater import WPTExpectationsUpdater
+from webkitpy.w3c.wpt_github import WPTGitHub
 from webkitpy.w3c.wpt_manifest import WPTManifest
 
 # Settings for how often to check try job results and how long to wait.
@@ -260,7 +260,7 @@
     def _commit_message(self, chromium_commit, import_commit):
         return ('Import %s\n\n'
                 'Using wpt-import in Chromium %s.\n\n'
-                'NOEXPORT=true' %
+                'No-Export: true' %
                 (import_commit, chromium_commit))
 
     def _delete_orphaned_baselines(self, dest_path):
@@ -343,9 +343,10 @@
 
         if try_results and self.git_cl.has_failing_try_results(try_results):
             self.fetch_new_expectations_and_baselines()
-            message = 'Update test expectations and baselines.'
-            self.check_run(['git', 'commit', '-a', '-m', message])
-            self._upload_patchset(message)
+            if self.host.git().has_working_directory_changes():
+                message = 'Update test expectations and baselines.'
+                self.check_run(['git', 'commit', '-a', '-m', message])
+                self._upload_patchset(message)
 
         # Trigger CQ and wait for CQ try jobs to finish.
         self.git_cl.run(['try'])
@@ -420,12 +421,12 @@
 
         if directory_owners:
             description += self._format_directory_owners(directory_owners) + '\n\n'
-        description += 'TBR=qyearsley@chromium.org\n'
+        description += 'TBR: qyearsley@chromium.org\n'
 
-        # Move any NOEXPORT tag to the end of the description.
-        description = description.replace('NOEXPORT=true', '')
+        # Move any No-Export tag to the end of the description.
+        description = description.replace('No-Export: true', '')
         description = description.replace('\n\n\n\n', '\n\n')
-        description += 'NOEXPORT=true'
+        description += 'No-Export: true'
         return description
 
     @staticmethod
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 b93a31e9a..6641d7a 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
@@ -4,17 +4,20 @@
 
 from webkitpy.common.checkout.git_mock import MockGit
 from webkitpy.common.host_mock import MockHost
+from webkitpy.common.net.buildbot import Build
+from webkitpy.common.net.git_cl import TryJobStatus
+from webkitpy.common.net.git_cl_mock import MockGitCL
 from webkitpy.common.system.executive_mock import MockExecutive
 from webkitpy.common.system.log_testing import LoggingTestCase
-from webkitpy.w3c.test_importer import TestImporter
 from webkitpy.w3c.chromium_commit_mock import MockChromiumCommit
-from webkitpy.w3c.wpt_github_mock import MockWPTGitHub
+from webkitpy.w3c.test_importer import TestImporter
 from webkitpy.w3c.wpt_github import PullRequest
+from webkitpy.w3c.wpt_github_mock import MockWPTGitHub
 
 
 class TestImporterTest(LoggingTestCase):
 
-    def test_abort_on_exportable_commits_pr_found(self):
+    def test_main_abort_on_exportable_commit_if_open_pr_found(self):
         host = MockHost()
         wpt_github = MockWPTGitHub(pull_requests=[
             PullRequest('Title', 5, 'Commit body\nChange-Id: Iba5eba11', 'open'),
@@ -40,7 +43,7 @@
             'INFO: Deleting temp repo directory /mock-checkout/third_party/WebKit/LayoutTests/wpt.\n',
         ])
 
-    def test_abort_on_exportable_commits_no_pr_found(self):
+    def test_main_abort_on_exportable_commit_if_no_pr_found(self):
         host = MockHost()
         wpt_github = MockWPTGitHub(pull_requests=[])
         importer = TestImporter(host, wpt_github=wpt_github)
@@ -64,7 +67,64 @@
             'INFO: Deleting temp repo directory /mock-checkout/third_party/WebKit/LayoutTests/wpt.\n',
         ])
 
-    def test_update_test_expectations(self):
+    def test_do_auto_update_no_results(self):
+        host = MockHost()
+        host.filesystem.write_text_file(
+            '/mock-checkout/third_party/WebKit/LayoutTests/W3CImportExpectations', '')
+        importer = TestImporter(host)
+        importer.git_cl = MockGitCL(host, results={})
+        success = importer.do_auto_update()
+        self.assertFalse(success)
+        self.assertLog([
+            'INFO: Uploading change list.\n',
+            'INFO: Gathering directory owners emails to CC.\n',
+            'INFO: Issue: mock output\n',
+            'INFO: Triggering try jobs.\n',
+            'ERROR: No initial try job results, aborting.\n',
+        ])
+        self.assertEqual(importer.git_cl.calls[-1], ['git', 'cl', 'set-close'])
+
+    def test_do_auto_update_all_jobs_pass(self):
+        host = MockHost()
+        host.filesystem.write_text_file(
+            '/mock-checkout/third_party/WebKit/LayoutTests/W3CImportExpectations', '')
+        importer = TestImporter(host)
+        importer.git_cl = MockGitCL(host, results={
+            Build('builder-a', 123): TryJobStatus('COMPLETED', 'SUCCESS')
+        })
+        success = importer.do_auto_update()
+        self.assertTrue(success)
+        self.assertLog([
+            'INFO: Uploading change list.\n',
+            'INFO: Gathering directory owners emails to CC.\n',
+            'INFO: Issue: mock output\n',
+            'INFO: Triggering try jobs.\n',
+            'INFO: CQ appears to have passed; trying to commit.\n',
+            'INFO: Update completed.\n',
+        ])
+        self.assertEqual(importer.git_cl.calls[-1], ['git', 'cl', 'set-commit'])
+
+    def test_do_auto_update_some_job_fails(self):
+        host = MockHost()
+        host.filesystem.write_text_file(
+            '/mock-checkout/third_party/WebKit/LayoutTests/W3CImportExpectations', '')
+        importer = TestImporter(host)
+        importer.git_cl = MockGitCL(host, results={
+            Build('builder-a', 123): TryJobStatus('COMPLETED', 'FAILURE')
+        })
+        importer.fetch_new_expectations_and_baselines = lambda: None
+        success = importer.do_auto_update()
+        self.assertFalse(success)
+        self.assertLog([
+            'INFO: Uploading change list.\n',
+            'INFO: Gathering directory owners emails to CC.\n',
+            'INFO: Issue: mock output\n',
+            'INFO: Triggering try jobs.\n',
+            'ERROR: CQ appears to have failed; aborting.\n',
+        ])
+        self.assertEqual(importer.git_cl.calls[-1], ['git', 'cl', 'set-close'])
+
+    def test_update_all_test_expectations_files(self):
         host = MockHost()
         host.filesystem.files['/mock-checkout/third_party/WebKit/LayoutTests/TestExpectations'] = (
             'Bug(test) some/test/a.html [ Failure ]\n'
@@ -85,6 +145,27 @@
             ('Bug(test) new/a.html [ Failure ]\n'
              'Bug(test) new/c.html [ Failure ]\n'))
 
+    def test_get_directory_owners(self):
+        host = MockHost()
+        host.filesystem.write_text_file(
+            '/mock-checkout/third_party/WebKit/LayoutTests/W3CImportExpectations',
+            '## Owners: someone@chromium.org\n'
+            '# external/wpt/foo [ Pass ]\n')
+        git = MockGit(filesystem=host.filesystem, executive=host.executive, platform=host.platform)
+        git.changed_files = lambda: ['third_party/WebKit/LayoutTests/external/wpt/foo/x.html']
+        host.git = lambda: git
+        importer = TestImporter(host)
+        self.assertEqual(importer.get_directory_owners(), {('someone@chromium.org',): ['external/wpt/foo']})
+
+    def test_get_directory_owners_no_changed_files(self):
+        host = MockHost()
+        host.filesystem.write_text_file(
+            '/mock-checkout/third_party/WebKit/LayoutTests/W3CImportExpectations',
+            '## Owners: someone@chromium.org\n'
+            '# external/wpt/foo [ Pass ]\n')
+        importer = TestImporter(host)
+        self.assertEqual(importer.get_directory_owners(), {})
+
     # Tests for protected methods - pylint: disable=protected-access
 
     def test_commit_changes(self):
@@ -102,7 +183,7 @@
             importer._commit_message('aaaa', '1111'),
             'Import 1111\n\n'
             'Using wpt-import in Chromium aaaa.\n\n'
-            'NOEXPORT=true')
+            'No-Export: true')
 
     def test_cl_description_with_empty_environ(self):
         host = MockHost()
@@ -118,8 +199,8 @@
             'lines to TestExpectations rather than reverting. See:\n'
             'https://chromium.googlesource.com'
             '/chromium/src/+/master/docs/testing/web_platform_tests.md\n\n'
-            'TBR=qyearsley@chromium.org\n'
-            'NOEXPORT=true')
+            'TBR: qyearsley@chromium.org\n'
+            'No-Export: true')
         self.assertEqual(host.executive.calls, [['git', 'log', '-1', '--format=%B']])
 
     def test_cl_description_with_environ_variables(self):
@@ -137,12 +218,12 @@
 
     def test_cl_description_moves_noexport_tag(self):
         host = MockHost()
-        host.executive = MockExecutive(output='Summary\n\nNOEXPORT=true\n\n')
+        host.executive = MockExecutive(output='Summary\n\nNo-Export: true\n\n')
         importer = TestImporter(host)
         description = importer._cl_description(directory_owners={})
         self.assertIn(
-            'TBR=qyearsley@chromium.org\n'
-            'NOEXPORT=true',
+            'TBR: qyearsley@chromium.org\n'
+            'No-Export: true',
             description)
 
     def test_cl_description_with_directory_owners(self):
@@ -162,6 +243,15 @@
             '  external/wpt/baz\n\n',
             description)
 
+    def test_cc_part(self):
+        directory_owners = {
+            ('someone@chromium.org',): ['external/wpt/foo', 'external/wpt/bar'],
+            ('x@chromium.org', 'y@chromium.org'): ['external/wpt/baz'],
+        }
+        self.assertEqual(
+            TestImporter._cc_part(directory_owners),
+            ['--cc=someone@chromium.org', '--cc=x@chromium.org', '--cc=y@chromium.org'])
+
     def test_generate_manifest_successful_run(self):
         # This test doesn't test any aspect of the real manifest script, it just
         # asserts that TestImporter._generate_manifest would invoke the script.
@@ -187,36 +277,6 @@
                 ]
             ])
 
-    def test_get_directory_owners(self):
-        host = MockHost()
-        host.filesystem.write_text_file(
-            '/mock-checkout/third_party/WebKit/LayoutTests/W3CImportExpectations',
-            '## Owners: someone@chromium.org\n'
-            '# external/wpt/foo [ Pass ]\n')
-        git = MockGit(filesystem=host.filesystem, executive=host.executive, platform=host.platform)
-        git.changed_files = lambda: ['third_party/WebKit/LayoutTests/external/wpt/foo/x.html']
-        host.git = lambda: git
-        importer = TestImporter(host)
-        self.assertEqual(importer.get_directory_owners(), {('someone@chromium.org',): ['external/wpt/foo']})
-
-    def test_get_directory_owners_no_changed_files(self):
-        host = MockHost()
-        host.filesystem.write_text_file(
-            '/mock-checkout/third_party/WebKit/LayoutTests/W3CImportExpectations',
-            '## Owners: someone@chromium.org\n'
-            '# external/wpt/foo [ Pass ]\n')
-        importer = TestImporter(host)
-        self.assertEqual(importer.get_directory_owners(), {})
-
-    def test_cc_part(self):
-        directory_owners = {
-            ('someone@chromium.org',): ['external/wpt/foo', 'external/wpt/bar'],
-            ('x@chromium.org', 'y@chromium.org'): ['external/wpt/baz'],
-        }
-        self.assertEqual(
-            TestImporter._cc_part(directory_owners),
-            ['--cc=someone@chromium.org', '--cc=x@chromium.org', '--cc=y@chromium.org'])
-
     def test_delete_orphaned_baselines(self):
         host = MockHost()
         dest_path = '/mock-checkout/third_party/WebKit/LayoutTests/external/wpt'
@@ -229,7 +289,7 @@
         self.assertTrue(host.filesystem.exists(dest_path + '/b.x-expected.txt'))
         self.assertTrue(host.filesystem.exists(dest_path + '/b.x.html'))
 
-    def test_keeps_owners_files_and_baselines(self):
+    def test_clear_out_dest_path(self):
         host = MockHost()
         dest_path = '/mock-checkout/third_party/WebKit/LayoutTests/external/wpt'
         host.filesystem.write_text_file(dest_path + '/foo-test.html', '')
@@ -237,6 +297,8 @@
         host.filesystem.write_text_file(dest_path + '/OWNERS', '')
         host.filesystem.write_text_file(dest_path + '/bar/baz/OWNERS', '')
         importer = TestImporter(host)
+        # When the destination path is cleared, OWNERS files and baselines
+        # are kept.
         importer._clear_out_dest_path(dest_path)
         self.assertFalse(host.filesystem.exists(dest_path + '/foo-test.html'))
         self.assertTrue(host.filesystem.exists(dest_path + '/foo-test-expected.txt'))
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_github.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_github.py
index 963d03f..ff5e090 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_github.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_github.py
@@ -9,11 +9,10 @@
 from collections import namedtuple
 
 from webkitpy.common.memoized import memoized
-from webkitpy.w3c.common import WPT_GH_ORG, WPT_GH_REPO_NAME
+from webkitpy.w3c.common import WPT_GH_ORG, WPT_GH_REPO_NAME, EXPORT_PR_LABEL
 
 _log = logging.getLogger(__name__)
 API_BASE = 'https://api.github.com'
-EXPORT_LABEL = 'chromium-export'
 
 
 class WPTGitHub(object):
@@ -110,7 +109,7 @@
 
         return data
 
-    def add_label(self, number, label=EXPORT_LABEL):
+    def add_label(self, number, label):
         path = '/repos/%s/%s/issues/%d/labels' % (
             WPT_GH_ORG,
             WPT_GH_REPO_NAME,
@@ -119,11 +118,22 @@
         body = [label]
         return self.request(path, method='POST', body=body)
 
+    def remove_label(self, number, label):
+        path = '/repos/%s/%s/issues/%d/labels/%s' % (
+            WPT_GH_ORG,
+            WPT_GH_REPO_NAME,
+            number,
+            label,
+        )
+        _, status_code = self.request(path, method='DELETE')
+        if status_code != 204:
+            raise GitHubError('Received non-204 status code attempting to delete remote branch: {}'.format(status_code))
+
     def in_flight_pull_requests(self):
         path = '/search/issues?q=repo:{}/{}%20is:open%20type:pr%20label:{}'.format(
             WPT_GH_ORG,
             WPT_GH_REPO_NAME,
-            EXPORT_LABEL
+            EXPORT_PR_LABEL
         )
         data, status_code = self.request(path, method='GET')
         if status_code == 200:
@@ -150,7 +160,7 @@
         ).format(
             WPT_GH_ORG,
             WPT_GH_REPO_NAME,
-            EXPORT_LABEL,
+            EXPORT_PR_LABEL,
             self._pr_history_window
         )
 
@@ -207,8 +217,7 @@
         data, status_code = self.request(path, method='DELETE')
 
         if status_code != 204:
-            # TODO(jeffcarp): Raise more specific exception (create MergeError class?)
-            raise Exception('Received non-204 status code attempting to delete remote branch: {}'.format(status_code))
+            raise GitHubError('Received non-204 status code attempting to delete remote branch: {}'.format(status_code))
 
         return data
 
@@ -253,4 +262,9 @@
     pass
 
 
+class GitHubError(Exception):
+    """Raised when an GitHub returns a non-OK response status for a request."""
+    pass
+
+
 PullRequest = namedtuple('PullRequest', ['title', 'number', 'body', 'state'])
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_github_mock.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_github_mock.py
index babde44f..7e8ff05 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_github_mock.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_github_mock.py
@@ -50,10 +50,14 @@
     def delete_remote_branch(self, _):
         self.calls.append('delete_remote_branch')
 
-    def add_label(self, _, label='default'):
+    def add_label(self, _, label):
         self.calls.append('add_label "%s"' % label)
         return {}, 200
 
+    def remove_label(self, _, label):
+        self.calls.append('remove_label "%s"' % label)
+        return {}, 204
+
     def get_pr_branch(self, number):
         self.calls.append('get_pr_branch')
         return 'fake branch for PR {}'.format(number)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_github_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_github_unittest.py
index a493a001..5d32b44c 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_github_unittest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_github_unittest.py
@@ -6,7 +6,7 @@
 import unittest
 
 from webkitpy.common.host_mock import MockHost
-from webkitpy.w3c.wpt_github import WPTGitHub, MergeError
+from webkitpy.w3c.wpt_github import WPTGitHub, MergeError, GitHubError
 
 
 class WPTGitHubTest(unittest.TestCase):
@@ -33,3 +33,19 @@
 
         with self.assertRaises(MergeError):
             self.wpt_github.merge_pull_request(5678)
+
+    def test_remove_label_throws_github_error_on_non_204(self):
+        self.wpt_github.host.web.responses = [
+            {'status_code': 200},
+        ]
+
+        with self.assertRaises(GitHubError):
+            self.wpt_github.remove_label(1234, 'rutabaga')
+
+    def test_delete_remote_branch_throws_github_error_on_non_204(self):
+        self.wpt_github.host.web.responses = [
+            {'status_code': 200},
+        ]
+
+        with self.assertRaises(GitHubError):
+            self.wpt_github.delete_remote_branch('rutabaga')
diff --git a/third_party/WebKit/public/platform/WebGestureEvent.h b/third_party/WebKit/public/platform/WebGestureEvent.h
index 3a07ab2e..d4cd2af 100644
--- a/third_party/WebKit/public/platform/WebGestureEvent.h
+++ b/third_party/WebKit/public/platform/WebGestureEvent.h
@@ -21,13 +21,15 @@
   enum ScrollUnits {
     kPrecisePixels = 0,  // generated by high precision devices.
     kPixels,             // large pixel jump duration; should animate to delta.
-    kPage                // page (visible viewport) based scrolling.
+    kPage,               // page (visible viewport) based scrolling.
+    kLastScrollUnit = kPage,
   };
 
   enum InertialPhaseState {
     kUnknownMomentumPhase = 0,  // No phase information.
     kNonMomentumPhase,          // Regular scrolling phase.
     kMomentumPhase,             // Momentum phase.
+    kLastPhase = kMomentumPhase,
   };
 
   // TODO(mustaq): Make these coordinates private & fractional, as in
@@ -175,6 +177,11 @@
         source_device(kWebGestureDeviceUninitialized),
         resending_plugin_id(-1) {}
 
+  WebFloatPoint PositionInWidget() const { return WebFloatPoint(x, y); }
+  WebFloatPoint PositionInScreen() const {
+    return WebFloatPoint(global_x, global_y);
+  }
+
 #if INSIDE_BLINK
   BLINK_PLATFORM_EXPORT float DeltaXInRootFrame() const;
   BLINK_PLATFORM_EXPORT float DeltaYInRootFrame() const;
diff --git a/third_party/WebKit/public/platform/WebInputEvent.h b/third_party/WebKit/public/platform/WebInputEvent.h
index 506bbd9..b7eff4a 100644
--- a/third_party/WebKit/public/platform/WebInputEvent.h
+++ b/third_party/WebKit/public/platform/WebInputEvent.h
@@ -275,6 +275,8 @@
     // was forced to be non-blocking due to the main thread being
     // unresponsive.
     kListenersForcedNonBlockingDueToMainThreadResponsiveness,
+    kLastDispatchType =
+        kListenersForcedNonBlockingDueToMainThreadResponsiveness,
   };
 
   // The rail mode for a wheel event specifies the axis on which scrolling is
diff --git a/third_party/WebKit/public/platform/WebRuntimeFeatures.h b/third_party/WebKit/public/platform/WebRuntimeFeatures.h
index 1f73ba74..89c42a6 100644
--- a/third_party/WebKit/public/platform/WebRuntimeFeatures.h
+++ b/third_party/WebKit/public/platform/WebRuntimeFeatures.h
@@ -123,7 +123,6 @@
   BLINK_PLATFORM_EXPORT static void EnableSharedWorker(bool);
   BLINK_PLATFORM_EXPORT static void EnableSkipCompositingSmallScrollers(bool);
   BLINK_PLATFORM_EXPORT static void EnableSlimmingPaintV2(bool);
-  BLINK_PLATFORM_EXPORT static void EnableSlimmingPaintInvalidation(bool);
   BLINK_PLATFORM_EXPORT static void EnableTouchEventFeatureDetection(bool);
   BLINK_PLATFORM_EXPORT static void EnableTouchpadAndWheelScrollLatching(bool);
   BLINK_PLATFORM_EXPORT static void EnableV8IdleTasks(bool);
diff --git a/third_party/WebKit/public/platform/modules/payments/WebCanMakePaymentEventData.h b/third_party/WebKit/public/platform/modules/payments/WebCanMakePaymentEventData.h
new file mode 100644
index 0000000..4e017677
--- /dev/null
+++ b/third_party/WebKit/public/platform/modules/payments/WebCanMakePaymentEventData.h
@@ -0,0 +1,25 @@
+// 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 WebCanMakePaymentEventData_h
+#define WebCanMakePaymentEventData_h
+
+#include "public/platform/WebString.h"
+#include "public/platform/WebVector.h"
+#include "public/platform/modules/payments/WebPaymentDetailsModifier.h"
+#include "public/platform/modules/payments/WebPaymentItem.h"
+#include "public/platform/modules/payments/WebPaymentMethodData.h"
+
+namespace blink {
+
+struct WebCanMakePaymentEventData {
+  WebString top_level_origin;
+  WebString payment_request_origin;
+  WebVector<WebPaymentMethodData> method_data;
+  WebVector<WebPaymentDetailsModifier> modifiers;
+};
+
+}  // namespace blink
+
+#endif  // WebCanMakePaymentEventData_h
diff --git a/third_party/WebKit/public/platform/modules/payments/WebPaymentRequestEventData.h b/third_party/WebKit/public/platform/modules/payments/WebPaymentRequestEventData.h
index 5b0ae340..30a0d7c 100644
--- a/third_party/WebKit/public/platform/modules/payments/WebPaymentRequestEventData.h
+++ b/third_party/WebKit/public/platform/modules/payments/WebPaymentRequestEventData.h
@@ -6,21 +6,14 @@
 #define WebPaymentRequestEventData_h
 
 #include "public/platform/WebString.h"
-#include "public/platform/WebVector.h"
-#include "public/platform/modules/payments/WebPaymentDetailsModifier.h"
-#include "public/platform/modules/payments/WebPaymentItem.h"
-#include "public/platform/modules/payments/WebPaymentMethodData.h"
+#include "public/platform/modules/payments/WebCanMakePaymentEventData.h"
 
 namespace blink {
 
-struct WebPaymentRequestEventData {
-  WebString top_level_origin;
-  WebString payment_request_origin;
+struct WebPaymentRequestEventData : public WebCanMakePaymentEventData {
   WebString payment_request_id;
-  WebVector<WebPaymentMethodData> method_data;
-  WebPaymentItem total;
-  WebVector<WebPaymentDetailsModifier> modifiers;
   WebString instrument_key;
+  WebPaymentItem total;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/public/web/WebFrame.h b/third_party/WebKit/public/web/WebFrame.h
index 329fffc..c5e99e2b 100644
--- a/third_party/WebKit/public/web/WebFrame.h
+++ b/third_party/WebKit/public/web/WebFrame.h
@@ -47,8 +47,6 @@
 class Frame;
 class OpenedFrameTracker;
 class Visitor;
-class WebAssociatedURLLoader;
-struct WebAssociatedURLLoaderOptions;
 class WebElement;
 class WebLocalFrame;
 class WebPerformance;
@@ -201,14 +199,6 @@
   virtual void EnableViewSourceMode(bool) = 0;
   virtual bool IsViewSourceModeEnabled() const = 0;
 
-  // Returns an AssociatedURLLoader that is associated with this frame.  The
-  // loader will, for example, be cancelled when WebFrame::stopLoading is
-  // called.
-  //
-  // FIXME: stopLoading does not yet cancel an associated loader!!
-  virtual WebAssociatedURLLoader* CreateAssociatedURLLoader(
-      const WebAssociatedURLLoaderOptions&) = 0;
-
   // Will return true if between didStartLoading and didStopLoading
   // notifications.
   virtual bool IsLoading() const;
diff --git a/third_party/WebKit/public/web/WebLocalFrame.h b/third_party/WebKit/public/web/WebLocalFrame.h
index 22184190..8e4c158 100644
--- a/third_party/WebKit/public/web/WebLocalFrame.h
+++ b/third_party/WebKit/public/web/WebLocalFrame.h
@@ -29,6 +29,7 @@
 
 class InterfaceProvider;
 class InterfaceRegistry;
+class WebAssociatedURLLoader;
 class WebAutofillClient;
 class WebContentSettingsClient;
 class WebData;
@@ -52,6 +53,7 @@
 class WebURLLoader;
 class WebView;
 enum class WebTreeScopeType;
+struct WebAssociatedURLLoaderOptions;
 struct WebConsoleMessage;
 struct WebContentSecurityPolicyViolation;
 struct WebFindOptions;
@@ -704,6 +706,14 @@
       const WebURLRequest&,
       base::SingleThreadTaskRunner*) = 0;
 
+  // Returns an AssociatedURLLoader that is associated with this frame.  The
+  // loader will, for example, be cancelled when WebFrame::stopLoading is
+  // called.
+  //
+  // FIXME: stopLoading does not yet cancel an associated loader!!
+  virtual WebAssociatedURLLoader* CreateAssociatedURLLoader(
+      const WebAssociatedURLLoaderOptions&) = 0;
+
   // Reload the current document.
   // Note: reload() and reloadWithOverrideURL() will be deprecated.
   // Do not use these APIs any more, but use loadRequest() instead.
diff --git a/tools/android/forwarder2/forwarders_manager.cc b/tools/android/forwarder2/forwarders_manager.cc
index e8b573f..941c424 100644
--- a/tools/android/forwarder2/forwarders_manager.cc
+++ b/tools/android/forwarder2/forwarders_manager.cc
@@ -15,6 +15,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/posix/eintr_wrapper.h"
 #include "tools/android/forwarder2/forwarder.h"
 #include "tools/android/forwarder2/socket.h"
@@ -51,7 +52,8 @@
     std::unique_ptr<Socket> socket1,
     std::unique_ptr<Socket> socket2) {
   DCHECK(thread_.task_runner()->RunsTasksInCurrentSequence());
-  forwarders_.push_back(new Forwarder(std::move(socket1), std::move(socket2)));
+  forwarders_.push_back(
+      base::MakeUnique<Forwarder>(std::move(socket1), std::move(socket2)));
 }
 
 void ForwardersManager::WaitForEventsOnInternalThreadSoon() {
@@ -71,11 +73,8 @@
 
   // Populate the file descriptor sets.
   int max_fd = -1;
-  for (ScopedVector<Forwarder>::iterator it = forwarders_.begin();
-       it != forwarders_.end(); ++it) {
-    Forwarder* const forwarder = *it;
+  for (const auto& forwarder : forwarders_)
     forwarder->RegisterFDs(&read_fds, &write_fds, &max_fd);
-  }
 
   const int notifier_fds[] = {
     wakeup_notifier_.receiver_fd(),
@@ -114,7 +113,7 @@
 
   // Notify the Forwarder instances and remove the ones that are closed.
   for (size_t i = 0; i < forwarders_.size(); ) {
-    Forwarder* const forwarder = forwarders_[i];
+    Forwarder* const forwarder = forwarders_[i].get();
     forwarder->ProcessEvents(read_fds, write_fds);
 
     if (must_shutdown)
diff --git a/tools/android/forwarder2/forwarders_manager.h b/tools/android/forwarder2/forwarders_manager.h
index 2cdafdb0..dd5d2b1 100644
--- a/tools/android/forwarder2/forwarders_manager.h
+++ b/tools/android/forwarder2/forwarders_manager.h
@@ -6,8 +6,8 @@
 #define TOOLS_ANDROID_FORWARDER2_FORWARDERS_MANAGER_H_
 
 #include <memory>
+#include <vector>
 
-#include "base/memory/scoped_vector.h"
 #include "base/threading/thread.h"
 #include "tools/android/forwarder2/pipe_notifier.h"
 
@@ -35,7 +35,7 @@
   void WaitForEventsOnInternalThreadSoon();
   void WaitForEventsOnInternalThread();
 
-  ScopedVector<Forwarder> forwarders_;
+  std::vector<std::unique_ptr<Forwarder>> forwarders_;
   PipeNotifier deletion_notifier_;
   PipeNotifier wakeup_notifier_;
   base::Thread thread_;
diff --git a/tools/gn/function_get_target_outputs.cc b/tools/gn/function_get_target_outputs.cc
index bec825f..e13e1e3a 100644
--- a/tools/gn/function_get_target_outputs.cc
+++ b/tools/gn/function_get_target_outputs.cc
@@ -93,7 +93,7 @@
     *err = Err(function, "No targets defined in this context.");
     return Value();
   }
-  for (auto* item : *collector) {
+  for (const auto& item : *collector) {
     if (item->label() != label)
       continue;
 
diff --git a/tools/gn/function_get_target_outputs_unittest.cc b/tools/gn/function_get_target_outputs_unittest.cc
index 3bff238..2f746a7 100644
--- a/tools/gn/function_get_target_outputs_unittest.cc
+++ b/tools/gn/function_get_target_outputs_unittest.cc
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <utility>
+
+#include "base/memory/ptr_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "tools/gn/functions.h"
 #include "tools/gn/target.h"
@@ -57,13 +60,14 @@
 }  // namespace
 
 TEST_F(GetTargetOutputsTest, Copy) {
-  Target* action = new Target(setup_.settings(), GetLabel("//foo/", "bar"), {});
+  auto action = base::MakeUnique<Target>(
+      setup_.settings(), GetLabel("//foo/", "bar"), InputFileSet{});
   action->set_output_type(Target::COPY_FILES);
   action->sources().push_back(SourceFile("//file.txt"));
   action->action_values().outputs() =
       SubstitutionList::MakeForTest("//out/Debug/{{source_file_part}}.one");
 
-  items_.push_back(action);
+  items_.push_back(std::move(action));
 
   Err err;
   Value result = GetTargetOutputs("//foo:bar", &err);
@@ -72,13 +76,14 @@
 }
 
 TEST_F(GetTargetOutputsTest, Action) {
-  Target* action = new Target(setup_.settings(), GetLabel("//foo/", "bar"), {});
+  auto action = base::MakeUnique<Target>(
+      setup_.settings(), GetLabel("//foo/", "bar"), InputFileSet{});
   action->set_output_type(Target::ACTION);
   action->action_values().outputs() = SubstitutionList::MakeForTest(
       "//output1.txt",
       "//output2.txt");
 
-  items_.push_back(action);
+  items_.push_back(std::move(action));
 
   Err err;
   Value result = GetTargetOutputs("//foo:bar", &err);
@@ -87,14 +92,15 @@
 }
 
 TEST_F(GetTargetOutputsTest, ActionForeach) {
-  Target* action = new Target(setup_.settings(), GetLabel("//foo/", "bar"), {});
+  auto action = base::MakeUnique<Target>(
+      setup_.settings(), GetLabel("//foo/", "bar"), InputFileSet{});
   action->set_output_type(Target::ACTION_FOREACH);
   action->sources().push_back(SourceFile("//file.txt"));
   action->action_values().outputs() = SubstitutionList::MakeForTest(
       "//out/Debug/{{source_file_part}}.one",
       "//out/Debug/{{source_file_part}}.two");
 
-  items_.push_back(action);
+  items_.push_back(std::move(action));
 
   Err err;
   Value result = GetTargetOutputs("//foo:bar", &err);
diff --git a/tools/gn/function_toolchain.cc b/tools/gn/function_toolchain.cc
index adbab300..beef1ea9 100644
--- a/tools/gn/function_toolchain.cc
+++ b/tools/gn/function_toolchain.cc
@@ -496,7 +496,7 @@
     *err = Err(function, "Can't define a toolchain in this context.");
     return Value();
   }
-  collector->push_back(toolchain.release());
+  collector->push_back(std::move(toolchain));
   return Value();
 }
 
diff --git a/tools/gn/functions.cc b/tools/gn/functions.cc
index 41022e67..09e3647d 100644
--- a/tools/gn/functions.cc
+++ b/tools/gn/functions.cc
@@ -366,7 +366,7 @@
     *err = Err(function, "Can't define a config in this context.");
     return Value();
   }
-  collector->push_back(config.release());
+  collector->push_back(std::move(config));
 
   return Value();
 }
@@ -919,7 +919,7 @@
     *err = Err(function, "Can't define a pool in this context.");
     return Value();
   }
-  collector->push_back(pool.release());
+  collector->push_back(std::move(pool));
 
   return Value();
 }
diff --git a/tools/gn/loader.cc b/tools/gn/loader.cc
index 417a891..a07ee5ab 100644
--- a/tools/gn/loader.cc
+++ b/tools/gn/loader.cc
@@ -278,10 +278,8 @@
 
 
   // Pass all of the items that were defined off to the builder.
-  for (auto*& item : collected_items) {
-    settings->build_settings()->ItemDefined(base::WrapUnique(item));
-    item = nullptr;
-  }
+  for (auto& item : collected_items)
+    settings->build_settings()->ItemDefined(std::move(item));
 
   trace.Done();
 
diff --git a/tools/gn/misc/OWNERS b/tools/gn/misc/OWNERS
new file mode 100644
index 0000000..4d2bd88
--- /dev/null
+++ b/tools/gn/misc/OWNERS
@@ -0,0 +1,2 @@
+scottmg@chromium.org
+erg@chromium.org
diff --git a/tools/gn/scheduler.cc b/tools/gn/scheduler.cc
index ed67c98e..5327792 100644
--- a/tools/gn/scheduler.cc
+++ b/tools/gn/scheduler.cc
@@ -205,11 +205,11 @@
 }
 
 void Scheduler::IncrementWorkCount() {
-  base::AtomicRefCountInc(&work_count_);
+  work_count_.Increment();
 }
 
 void Scheduler::DecrementWorkCount() {
-  if (!base::AtomicRefCountDec(&work_count_)) {
+  if (!work_count_.Decrement()) {
     if (task_runner()->BelongsToCurrentThread()) {
       OnComplete();
     } else {
diff --git a/tools/gn/scope.h b/tools/gn/scope.h
index 2adcabd2..20a64bc 100644
--- a/tools/gn/scope.h
+++ b/tools/gn/scope.h
@@ -9,11 +9,11 @@
 #include <memory>
 #include <set>
 #include <utility>
+#include <vector>
 
 #include "base/containers/hash_tables.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_vector.h"
 #include "tools/gn/err.h"
 #include "tools/gn/input_file.h"
 #include "tools/gn/pattern.h"
@@ -41,7 +41,7 @@
   typedef base::hash_map<base::StringPiece, Value, base::StringPieceHash>
       KeyValueMap;
   // Holds an owning list of Items.
-  typedef ScopedVector<Item> ItemVector;
+  typedef std::vector<std::unique_ptr<Item>> ItemVector;
 
   // A flag to indicate whether a function should recurse into nested scopes,
   // or only operate on the current scope.
diff --git a/tools/gn/target_generator.cc b/tools/gn/target_generator.cc
index 947cf9f..e8d064d0 100644
--- a/tools/gn/target_generator.cc
+++ b/tools/gn/target_generator.cc
@@ -6,6 +6,8 @@
 
 #include <stddef.h>
 
+#include <utility>
+
 #include "tools/gn/action_target_generator.h"
 #include "tools/gn/binary_target_generator.h"
 #include "tools/gn/build_settings.h"
@@ -149,7 +151,7 @@
     *err = Err(function_call, "Can't define a target in this context.");
     return;
   }
-  collector->push_back(target.release());
+  collector->push_back(std::move(target));
 }
 
 const BuildSettings* TargetGenerator::GetBuildSettings() const {
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 0d968b78..b1abd705 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -19512,6 +19512,28 @@
   <int value="2" label="Disconnected"/>
 </enum>
 
+<enum name="IcingContextReportingStatus">
+  <int value="0" label="Success"/>
+  <int value="1" label="GSA not available"/>
+  <int value="2" label="Sync not initialized"/>
+  <int value="3" label="Sync not syncing urls"/>
+  <int value="4" label="Sync no keystore passphrase"/>
+  <int value="5" label="Sync failed due to other reason (unexpected)"/>
+  <int value="6" label="Disabled on svelte devices"/>
+  <int value="7" label="No current tab found"/>
+  <int value="8" label="Current tab is incognito"/>
+  <int value="9" label="Invalid URL scheme"/>
+  <int value="10" label="Current tab ID doesn't match expected tab ID"/>
+  <int value="11" label="Duplicate title changed notification"/>
+  <int value="12" label="Connection to GMS failed"/>
+  <int value="13" label="Sync not ready at report time"/>
+  <int value="14" label="Not signed in at report time"/>
+  <int value="15" label="GSA account not present in Chrome"/>
+  <int value="16" label="GSA account doesn't match Chrome's"/>
+  <int value="17" label="GMS call result status is null"/>
+  <int value="18" label="GMS call result status is not successful"/>
+</enum>
+
 <enum name="IDBContextForcedCloseReason">
   <int value="0" label="DeleteOrigin">
     A request was made to delete the data for an origin.
@@ -36761,9 +36783,12 @@
 
 <enum name="TPMVersionFingerprint">
   <int value="305524852" label="IFX 4.32 build 0x36f variant 1"/>
+  <int value="368058567" label="STM 0xd08"/>
   <int value="517482723" label="IFX 4.32 build 0x36f variant 2"/>
+  <int value="639195905" label="IFX 4.32 build 0x36f variant 3"/>
   <int value="987235505" label="CROS 0dc5c85b01a68fe6"/>
   <int value="987973414" label="IFX 6.40 build 0xbe"/>
+  <int value="1311411160" label="WEC 0x345"/>
   <int value="1353576267" label="IFX 3.18 build 0x9"/>
   <int value="1437720528" label="IFX 133.32 build 0x5 variant 1"/>
   <int value="1451134301" label="IFX 147.18 build 0xf"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 2bd6db2..3c2dd247 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -2061,6 +2061,17 @@
   </summary>
 </histogram>
 
+<histogram name="Ash.Accelerators.Deprecated.ToggleHighContrast"
+    enum="DeprecatedAcceleratorUsage">
+  <owner>afakhry@chromium.org</owner>
+  <summary>
+    Toggling the high contrast display mode has two accelerators: -
+    Search+Shift+H which is deprecated.   - Ctrl+Search+H which is new. This
+    histogram shows the number of times each accelerator (deprecated and new) is
+    used.
+  </summary>
+</histogram>
+
 <histogram name="Ash.ActiveTouchPoints">
   <obsolete>
     Deprecated 02/2017 due to lack of usage.
@@ -68412,6 +68423,17 @@
   </summary>
 </histogram>
 
+<histogram name="Search.IcingContextReportingStatus"
+    enum="IcingContextReportingStatus">
+  <owner>joaodasilva@chromium.org</owner>
+  <summary>
+    Records the reason why a context report to Icing failed, every time Chrome
+    attemps to record the current context (tab switching, navigations, etc).
+    Also records reasons why context reporting might be disabled. Recorded on
+    Android only.
+  </summary>
+</histogram>
+
 <histogram name="Search.MigratedPrefToDictionaryValue" enum="BooleanHit">
   <obsolete>
     Deprecated after migrator is deleted in 12/2016.
@@ -83677,6 +83699,26 @@
   </summary>
 </histogram>
 
+<histogram name="WebAudio.PushPullFIFO.UnderflowGlitches" enum="Boolean">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    Captures if WebAudio caused glitches or not due to the FIFO underflow. It is
+    recorded when PushPullFIFO is destroyed. (e.g. navigating away from the
+    page.)
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.PushPullFIFO.UnderflowPercentage" units="%">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    Percentage of FIFO underflow happened due to the the missed deadline of
+    WebAudio rendering engine. It is recorded when PushPullFIFO is destroyed.
+    (e.g. navigating away from the page.)
+  </summary>
+</histogram>
+
 <histogram name="WebAudio.UserGesture" enum="UserGestureRequirement">
   <obsolete>
     Deprecated 2016-09. As of M55, this is no longer recorded.
@@ -87636,6 +87678,9 @@
 </histogram>
 
 <histogram name="WinJumplist.CreateIconFilesCount">
+  <obsolete>
+    Obsolete 07/06/2017 as we are no long recording this metric.
+  </obsolete>
   <owner>chengx@chromium.org</owner>
   <summary>
     The number of jumplist icons requested to create per jumplist update. It is
@@ -87644,6 +87689,9 @@
 </histogram>
 
 <histogram name="WinJumplist.CreateIconFilesDuration" units="ms">
+  <obsolete>
+    Obsolete 07/06/2017 as we are no long recording this metric.
+  </obsolete>
   <owner>chengx@chromium.org</owner>
   <summary>
     Time spent in CreateIconFiles(). This method is called whenever there is a
@@ -87658,7 +87706,7 @@
 
 <histogram name="WinJumplist.DeleteDirectoryDuration" units="ms">
   <obsolete>
-    Obsolete 04/25/2016 as we are no long recording this metric.
+    Obsolete 04/25/2017 as we are no long recording this metric.
   </obsolete>
   <owner>chengx@chromium.org</owner>
   <summary>Time spent in DeleteDirectoryAndLogResults().</summary>
@@ -87667,7 +87715,7 @@
 <histogram name="WinJumplist.DeleteStatusJumpListIcons"
     enum="JumplisticonsDeleteCategory">
   <obsolete>
-    Obsolete 04/25/2016 as we are no long recording this metric.
+    Obsolete 04/25/2017 as we are no long recording this metric.
   </obsolete>
   <owner>chengx@chromium.org</owner>
   <summary>
@@ -87678,7 +87726,7 @@
 <histogram name="WinJumplist.DeleteStatusJumpListIconsOld"
     enum="JumplisticonsDeleteCategory">
   <obsolete>
-    Obsolete 04/25/2016 as we are no long recording this metric.
+    Obsolete 04/25/2017 as we are no long recording this metric.
   </obsolete>
   <owner>chengx@chromium.org</owner>
   <summary>
@@ -87725,7 +87773,7 @@
 <histogram name="WinJumplist.DetailedFolderResultsDeleteUpdated"
     enum="JumplistIconsDetailedFolderOperationDeleteUpdatedCategory">
   <obsolete>
-    Obsolete 03/20/2016. New metrics named WinJumplist.DeleteStatusJumpListIcons
+    Obsolete 03/20/2017. New metrics named WinJumplist.DeleteStatusJumpListIcons
     and WinJumplist.DeleteStatusJumpListIconsOld are used instead.
   </obsolete>
   <owner>chengx@chromium.org</owner>
@@ -87746,7 +87794,7 @@
 <histogram name="WinJumplist.DirectoryStatusJumpListIcons"
     enum="JumpListIconsFolderExistOrEmptyCategory">
   <obsolete>
-    Obsolete 04/25/2016 as we are no long recording this metric.
+    Obsolete 04/25/2017 as we are no long recording this metric.
   </obsolete>
   <owner>chengx@chromium.org</owner>
   <summary>
@@ -87758,7 +87806,7 @@
 <histogram name="WinJumplist.DirectoryStatusJumpListIconsOld"
     enum="JumpListIconsFolderExistOrEmptyCategory">
   <obsolete>
-    Obsolete 04/25/2016 as we are no long recording this metric.
+    Obsolete 04/25/2017 as we are no long recording this metric.
   </obsolete>
   <owner>chengx@chromium.org</owner>
   <summary>
diff --git a/tools/perf/benchmarks/smoothness.py b/tools/perf/benchmarks/smoothness.py
index 01049de4..707a7e9 100644
--- a/tools/perf/benchmarks/smoothness.py
+++ b/tools/perf/benchmarks/smoothness.py
@@ -170,6 +170,7 @@
     return StoryExpectations()
 
 
+@benchmark.Disabled('win') # http://crbug.com/692663
 @benchmark.Disabled('android-webview')  # http://crbug.com/653933
 @benchmark.Owner(emails=['kbr@chromium.org', 'zmo@chromium.org'])
 class SmoothnessMaps(perf_benchmark.PerfBenchmark):
diff --git a/tools/perf/page_sets/system_health/expectations.py b/tools/perf/page_sets/system_health/expectations.py
index 66a82ee..715db4f 100644
--- a/tools/perf/page_sets/system_health/expectations.py
+++ b/tools/perf/page_sets/system_health/expectations.py
@@ -28,8 +28,6 @@
                       [expectations.ALL_WIN], 'crbug.com/728152')
     self.DisableStory('browse:news:cnn',
                       [expectations.ALL_MAC], 'crbug.com/728576')
-    self.DisableStory('browse:social:twitter_infinite_scroll',
-                      [expectations.ALL], 'crbug.com/728464')
     self.DisableStory('browse:media:flickr_infinite_scroll',
                       [expectations.ALL],
                       'crbug.com/728785')
@@ -61,8 +59,6 @@
                       [expectations.ALL_WIN], 'crbug.com/728152')
     self.DisableStory('browse:news:cnn',
                       [expectations.ALL_MAC], 'crbug.com/728576')
-    self.DisableStory('browse:social:twitter_infinite_scroll',
-                      [expectations.ALL], 'crbug.com/728464')
     self.DisableStory('browse:media:flickr_infinite_scroll',
                       [expectations.ALL],
                       'crbug.com/728785')
@@ -165,8 +161,6 @@
                       'crbug.com/728152')
     self.DisableStory('browse:news:cnn',
                       [expectations.ALL_MAC], 'crbug.com/728576')
-    self.DisableStory('browse:social:twitter_infinite_scroll',
-                      [expectations.ALL], 'crbug.com/728464')
     self.DisableStory('browse:media:flickr_infinite_scroll',
                       [expectations.ALL, expectations.ALL_WIN],
                       'crbug.com/728785')
diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn
index 22a9c49..7ddbe98 100644
--- a/ui/android/BUILD.gn
+++ b/ui/android/BUILD.gn
@@ -66,7 +66,6 @@
     "//ui/base",
     "//ui/display",
     "//ui/events",
-    "//ui/events/devices",
     "//ui/gfx",
     "//ui/gfx/geometry",
     "//url",
@@ -214,7 +213,6 @@
     "java/src/org/chromium/ui/display/DisplaySwitches.java",
     "java/src/org/chromium/ui/display/PhysicalDisplayAndroid.java",
     "java/src/org/chromium/ui/display/VirtualDisplayAndroid.java",
-    "java/src/org/chromium/ui/events/devices/InputDeviceObserver.java",
     "java/src/org/chromium/ui/gfx/BitmapHelper.java",
     "java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java",
     "java/src/org/chromium/ui/gl/SurfaceTextureListener.java",
diff --git a/ui/android/java/src/org/chromium/ui/events/devices/InputDeviceObserver.java b/ui/android/java/src/org/chromium/ui/events/devices/InputDeviceObserver.java
deleted file mode 100644
index df2254f..0000000
--- a/ui/android/java/src/org/chromium/ui/events/devices/InputDeviceObserver.java
+++ /dev/null
@@ -1,81 +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.ui.events.devices;
-
-import android.content.Context;
-import android.hardware.input.InputManager;
-import android.hardware.input.InputManager.InputDeviceListener;
-
-import org.chromium.base.ContextUtils;
-import org.chromium.base.ThreadUtils;
-import org.chromium.base.annotations.CalledByNative;
-import org.chromium.base.annotations.JNINamespace;
-
-/**
- * A singleton that helps detecting changes in input devices through the interface
- * {@link InputDeviceObserver}.
- */
-@JNINamespace("ui")
-public class InputDeviceObserver implements InputDeviceListener {
-    private static final InputDeviceObserver INSTANCE = new InputDeviceObserver();
-
-    /**
-     * Notifies the InputDeviceObserver that an observer is attached and it
-     * should prepare itself for listening input changes.
-     */
-    @CalledByNative
-    public static void addObserver() {
-        assert ThreadUtils.runningOnUiThread();
-        INSTANCE.attachObserver();
-    }
-
-    /**
-     * Notifies the InputDeviceObserver that an observer has been removed.
-     */
-    @CalledByNative
-    public static void removeObserver() {
-        assert ThreadUtils.runningOnUiThread();
-        INSTANCE.detachObserver();
-    }
-
-    private InputManager mInputManager;
-    private InputDeviceListener mInputDeviceListener;
-    private int mObserversCounter;
-
-    // Override InputDeviceListener methods
-    @Override
-    public void onInputDeviceChanged(int deviceId) {
-        nativeInputConfigurationChanged();
-    }
-
-    @Override
-    public void onInputDeviceRemoved(int deviceId) {
-        nativeInputConfigurationChanged();
-    }
-
-    @Override
-    public void onInputDeviceAdded(int deviceId) {
-        nativeInputConfigurationChanged();
-    }
-
-    private void attachObserver() {
-        if (mObserversCounter++ == 0) {
-            Context context = ContextUtils.getApplicationContext();
-            mInputManager = (InputManager) context.getSystemService(Context.INPUT_SERVICE);
-            // Register an input device listener.
-            mInputManager.registerInputDeviceListener(this, null);
-        }
-    }
-
-    private void detachObserver() {
-        assert mObserversCounter > 0;
-        if (--mObserversCounter == 0) {
-            mInputManager.unregisterInputDeviceListener(this);
-            mInputManager = null;
-        }
-    }
-
-    private native void nativeInputConfigurationChanged();
-}
\ No newline at end of file
diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn
index f7b9f78..4441ecb 100644
--- a/ui/base/BUILD.gn
+++ b/ui/base/BUILD.gn
@@ -367,6 +367,7 @@
     sources += [ "touch/touch_device_win.cc" ]
   } else if (is_android) {
     sources += [ "touch/touch_device_android.cc" ]
+    sources -= [ "touch/touch_device_util.cc" ]
   } else if (is_ios) {
     sources += [ "touch/touch_device_ios.cc" ]
   } else if (is_linux) {
diff --git a/ui/base/ime/composition_underline.h b/ui/base/ime/composition_underline.h
index f817069..9eb7763 100644
--- a/ui/base/ime/composition_underline.h
+++ b/ui/base/ime/composition_underline.h
@@ -38,6 +38,11 @@
         thick(t),
         background_color(bc) {}
 
+  bool operator<(const CompositionUnderline& rhs) const {
+    return std::tie(start_offset, end_offset) <
+           std::tie(rhs.start_offset, rhs.end_offset);
+  }
+
   bool operator==(const CompositionUnderline& rhs) const {
     return (this->start_offset == rhs.start_offset) &&
            (this->end_offset == rhs.end_offset) && (this->color == rhs.color) &&
diff --git a/ui/base/touch/touch_device_android.cc b/ui/base/touch/touch_device_android.cc
index 92febc1..2a65323 100644
--- a/ui/base/touch/touch_device_android.cc
+++ b/ui/base/touch/touch_device_android.cc
@@ -20,7 +20,7 @@
   return Java_TouchDevice_maxTouchPoints(AttachCurrentThread());
 }
 
-std::pair<int, int> AvailablePointerAndHoverTypes() {
+std::pair<int, int> GetAvailablePointerAndHoverTypes() {
   JNIEnv* env = AttachCurrentThread();
   std::vector<int> pointer_and_hover_types;
   base::android::JavaIntArrayToIntVector(
@@ -30,14 +30,6 @@
   return std::make_pair(pointer_and_hover_types[0], pointer_and_hover_types[1]);
 }
 
-int GetAvailableHoverTypes() {
-  return AvailablePointerAndHoverTypes().second;
-}
-
-int GetAvailablePointerTypes() {
-  return AvailablePointerAndHoverTypes().first;
-}
-
 PointerType GetPrimaryPointerType(int available_pointer_types) {
   if (available_pointer_types & POINTER_TYPE_COARSE)
     return POINTER_TYPE_COARSE;
diff --git a/ui/events/blink/blink_event_util.cc b/ui/events/blink/blink_event_util.cc
index c380b89..1c2c1312 100644
--- a/ui/events/blink/blink_event_util.cc
+++ b/ui/events/blink/blink_event_util.cc
@@ -804,6 +804,8 @@
     float x = (mouse_event->PositionInWidget().x + delta.x()) * scale;
     float y = (mouse_event->PositionInWidget().y + delta.y()) * scale;
     mouse_event->SetPositionInWidget(x, y);
+    mouse_event->movement_x *= scale;
+    mouse_event->movement_y *= scale;
   } else if (blink::WebInputEvent::IsTouchEventType(event.GetType())) {
     blink::WebTouchEvent* touch_event = new blink::WebTouchEvent;
     scaled_event.reset(touch_event);
diff --git a/ui/events/blink/blink_event_util_unittest.cc b/ui/events/blink/blink_event_util_unittest.cc
index 36c8082..0f894147 100644
--- a/ui/events/blink/blink_event_util_unittest.cc
+++ b/ui/events/blink/blink_event_util_unittest.cc
@@ -201,19 +201,4 @@
   EXPECT_FALSE(CanCoalesce(event_to_be_coalesced, coalesced_event));
 }
 
-TEST(BlinkEventUtilTest, WebMouseMoveEventMovementNotChanged) {
-  blink::WebMouseEvent event(blink::WebInputEvent::kMouseMove,
-                             blink::WebInputEvent::kNoModifiers,
-                             blink::WebInputEvent::kTimeStampForTesting);
-  event.movement_x = 1;
-  event.movement_y = 1;
-  std::unique_ptr<blink::WebInputEvent> webEvent =
-      ScaleWebInputEvent(event, 2.f);
-  EXPECT_TRUE(webEvent);
-  blink::WebMouseEvent* mouseEvent =
-      static_cast<blink::WebMouseEvent*>(webEvent.get());
-  EXPECT_EQ(1, mouseEvent->movement_x);
-  EXPECT_EQ(1, mouseEvent->movement_y);
-}
-
 }  // namespace ui
diff --git a/ui/events/devices/BUILD.gn b/ui/events/devices/BUILD.gn
index ca8c4e8..9565cc7 100644
--- a/ui/events/devices/BUILD.gn
+++ b/ui/events/devices/BUILD.gn
@@ -2,11 +2,6 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-if (is_android) {
-  import("//build/config/android/config.gni")
-  import("//build/config/android/rules.gni")
-}
-
 component("devices") {
   sources = [
     "device_data_manager.cc",
@@ -20,8 +15,6 @@
     "input_device_event_observer.h",
     "input_device_manager.cc",
     "input_device_manager.h",
-    "input_device_observer_android.cc",
-    "input_device_observer_android.h",
     "input_device_observer_win.cc",
     "input_device_observer_win.h",
     "stylus_state.h",
@@ -42,17 +35,4 @@
     "//ui/display/types",
     "//ui/gfx/geometry",
   ]
-
-  if (is_android) {
-    deps += [ ":ui_events_devices_jni_headers" ]
-  }
-}
-
-if (is_android) {
-  generate_jni("ui_events_devices_jni_headers") {
-    sources = [
-      "../../android/java/src/org/chromium/ui/events/devices/InputDeviceObserver.java",
-    ]
-    jni_package = "events/devices"
-  }
 }
diff --git a/ui/events/devices/DEPS b/ui/events/devices/DEPS
deleted file mode 100644
index 1d2c11b..0000000
--- a/ui/events/devices/DEPS
+++ /dev/null
@@ -1,5 +0,0 @@
-specific_include_rules = {
-  "input_device_observer_android.cc": [
-    "+jni",
-  ],
-}
diff --git a/ui/events/devices/input_device_observer_android.cc b/ui/events/devices/input_device_observer_android.cc
deleted file mode 100644
index 3313b7fe..0000000
--- a/ui/events/devices/input_device_observer_android.cc
+++ /dev/null
@@ -1,67 +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.
-
-#include "ui/events/devices/input_device_observer_android.h"
-
-#include "base/memory/singleton.h"
-#include "jni/InputDeviceObserver_jni.h"
-
-using base::android::AttachCurrentThread;
-using base::android::JavaParamRef;
-
-// This macro provides the implementation for the observer notification methods.
-#define NOTIFY_OBSERVERS(method_decl, observer_call)           \
-  void InputDeviceObserverAndroid::method_decl {               \
-    for (ui::InputDeviceEventObserver & observer : observers_) \
-      observer.observer_call;                                  \
-  }
-
-namespace ui {
-
-bool InputDeviceObserverAndroid::RegisterInputDeviceObserver(JNIEnv* env) {
-  return RegisterNativesImpl(env);
-}
-
-InputDeviceObserverAndroid::InputDeviceObserverAndroid() {}
-
-InputDeviceObserverAndroid::~InputDeviceObserverAndroid() {}
-
-InputDeviceObserverAndroid* InputDeviceObserverAndroid::GetInstance() {
-  return base::Singleton<
-      InputDeviceObserverAndroid,
-      base::LeakySingletonTraits<InputDeviceObserverAndroid>>::get();
-}
-
-void InputDeviceObserverAndroid::AddObserver(
-    ui::InputDeviceEventObserver* observer) {
-  observers_.AddObserver(observer);
-  JNIEnv* env = AttachCurrentThread();
-  Java_InputDeviceObserver_addObserver(env);
-}
-
-void InputDeviceObserverAndroid::RemoveObserver(
-    ui::InputDeviceEventObserver* observer) {
-  observers_.RemoveObserver(observer);
-  JNIEnv* env = AttachCurrentThread();
-  Java_InputDeviceObserver_removeObserver(env);
-}
-
-static void InputConfigurationChanged(JNIEnv* env,
-                                      const JavaParamRef<jobject>& obj) {
-  InputDeviceObserverAndroid::GetInstance()
-      ->NotifyObserversTouchpadDeviceConfigurationChanged();
-  InputDeviceObserverAndroid::GetInstance()
-      ->NotifyObserversKeyboardDeviceConfigurationChanged();
-  InputDeviceObserverAndroid::GetInstance()
-      ->NotifyObserversMouseDeviceConfigurationChanged();
-}
-
-NOTIFY_OBSERVERS(NotifyObserversMouseDeviceConfigurationChanged(),
-                 OnMouseDeviceConfigurationChanged());
-NOTIFY_OBSERVERS(NotifyObserversTouchpadDeviceConfigurationChanged(),
-                 OnTouchpadDeviceConfigurationChanged());
-NOTIFY_OBSERVERS(NotifyObserversKeyboardDeviceConfigurationChanged(),
-                 OnKeyboardDeviceConfigurationChanged());
-
-}  // namespace ui
\ No newline at end of file
diff --git a/ui/events/devices/input_device_observer_android.h b/ui/events/devices/input_device_observer_android.h
deleted file mode 100644
index 311dfa82..0000000
--- a/ui/events/devices/input_device_observer_android.h
+++ /dev/null
@@ -1,48 +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.
-
-#ifndef UI_EVENTS_DEVICES_INPUT_DEVICE_OBSERVER_ANDROID_H_
-#define UI_EVENTS_DEVICES_INPUT_DEVICE_OBSERVER_ANDROID_H_
-
-#include <jni.h>
-
-#include "base/observer_list.h"
-#include "ui/events/devices/input_device_event_observer.h"
-
-namespace base {
-template <typename T>
-struct DefaultSingletonTraits;
-}
-
-namespace ui {
-
-// This class is a singleton responsible to notify the
-// InputDeviceChangeObserver whenever an input change
-// happened on the Java side.
-class EVENTS_DEVICES_EXPORT InputDeviceObserverAndroid {
- public:
-  static InputDeviceObserverAndroid* GetInstance();
-  ~InputDeviceObserverAndroid();
-
-  static bool RegisterInputDeviceObserver(JNIEnv* env);
-
-  void AddObserver(ui::InputDeviceEventObserver* observer);
-  void RemoveObserver(ui::InputDeviceEventObserver* observer);
-
-  void NotifyObserversTouchpadDeviceConfigurationChanged();
-  void NotifyObserversKeyboardDeviceConfigurationChanged();
-  void NotifyObserversMouseDeviceConfigurationChanged();
-
- private:
-  InputDeviceObserverAndroid();
-
-  base::ObserverList<ui::InputDeviceEventObserver> observers_;
-
-  friend struct base::DefaultSingletonTraits<InputDeviceObserverAndroid>;
-  DISALLOW_COPY_AND_ASSIGN(InputDeviceObserverAndroid);
-};
-
-}  // namespace ui
-
-#endif  // UI_EVENTS_DEVICES_INPUT_DEVICE_OBSERVER_ANDROID_H_
diff --git a/ui/events/devices/input_device_observer_win.h b/ui/events/devices/input_device_observer_win.h
index 3390507..fd0f5b4 100644
--- a/ui/events/devices/input_device_observer_win.h
+++ b/ui/events/devices/input_device_observer_win.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef UI_EVENTS_DEVICES_INPUT_DEVICE_OBSERVER_WIN_H_
-#define UI_EVENTS_DEVICES_INPUT_DEVICE_OBSERVER_WIN_H_
+#ifndef CONTENT_BROWSER_RENDERER_HOST_INPUT_INPUT_DEVICE_OBSERVER_WIN_H_
+#define CONTENT_BROWSER_RENDERER_HOST_INPUT_INPUT_DEVICE_OBSERVER_WIN_H_
 
 #include "base/observer_list.h"
 #include "base/win/registry.h"
@@ -45,4 +45,4 @@
 
 }  // namespace ui
 
-#endif  // UI_EVENTS_DEVICES_INPUT_DEVICE_OBSERVER_WIN_H_
\ No newline at end of file
+#endif  // CONTENT_BROWSER_RENDERER_HOST_INPUT_INPUT_DEVICE_OBSERVER_WIN_H_
\ No newline at end of file
diff --git a/ui/gfx/geometry/mojo/BUILD.gn b/ui/gfx/geometry/mojo/BUILD.gn
index 1fcd39f..0e51ef9 100644
--- a/ui/gfx/geometry/mojo/BUILD.gn
+++ b/ui/gfx/geometry/mojo/BUILD.gn
@@ -12,7 +12,7 @@
   ]
 
   # TODO(crbug.com/699569): Convert to use the new JS bindings.
-  use_new_js_bindings = false
+  js_bindings_mode = "both"
 }
 
 mojom("test_interfaces") {
diff --git a/ui/views/controls/button/checkbox.cc b/ui/views/controls/button/checkbox.cc
index 0c7a721..a21d406d 100644
--- a/ui/views/controls/button/checkbox.cc
+++ b/ui/views/controls/button/checkbox.cc
@@ -17,6 +17,7 @@
 #include "ui/views/animation/ink_drop_impl.h"
 #include "ui/views/animation/ink_drop_ripple.h"
 #include "ui/views/controls/button/label_button_border.h"
+#include "ui/views/layout/layout_provider.h"
 #include "ui/views/painter.h"
 #include "ui/views/resources/grit/views_resources.h"
 #include "ui/views/style/platform_style.h"
@@ -193,6 +194,14 @@
   return images_[checked_index][focused_index][for_state];
 }
 
+std::unique_ptr<LabelButtonBorder> Checkbox::CreateDefaultBorder() const {
+  std::unique_ptr<LabelButtonBorder> border =
+      LabelButton::CreateDefaultBorder();
+  border->set_insets(
+      LayoutProvider::Get()->GetInsetsMetric(INSETS_CHECKBOX_RADIO_BUTTON));
+  return border;
+}
+
 void Checkbox::SetCustomImage(bool checked,
                               bool focused,
                               ButtonState for_state,
diff --git a/ui/views/controls/button/checkbox.h b/ui/views/controls/button/checkbox.h
index 54ea6169..9622387 100644
--- a/ui/views/controls/button/checkbox.h
+++ b/ui/views/controls/button/checkbox.h
@@ -51,6 +51,7 @@
   SkColor GetInkDropBaseColor() const override;
   void PaintButtonContents(gfx::Canvas* canvas) override;
   gfx::ImageSkia GetImage(ButtonState for_state) const override;
+  std::unique_ptr<LabelButtonBorder> CreateDefaultBorder() const override;
 
   // Set the image shown for each button state depending on whether it is
   // [checked] or [focused].
diff --git a/ui/views/layout/layout_provider.cc b/ui/views/layout/layout_provider.cc
index 3f0f606..fd7c9c396 100644
--- a/ui/views/layout/layout_provider.cc
+++ b/ui/views/layout/layout_provider.cc
@@ -42,6 +42,8 @@
       return gfx::Insets(bubble_contents.top(), bubble_contents.left(), 0,
                          bubble_contents.right());
     }
+    case InsetsMetric::INSETS_CHECKBOX_RADIO_BUTTON:
+      return gfx::Insets(5, 6);
     case InsetsMetric::INSETS_DIALOG_BUTTON_ROW: {
       const gfx::Insets dialog_contents =
           GetInsetsMetric(INSETS_DIALOG_CONTENTS);
diff --git a/ui/views/layout/layout_provider.h b/ui/views/layout/layout_provider.h
index b7861b39..a5d9386 100644
--- a/ui/views/layout/layout_provider.h
+++ b/ui/views/layout/layout_provider.h
@@ -24,6 +24,8 @@
   // The margins around the title of a bubble (popover)-style dialog. The bottom
   // margin is implied by the content insets.
   INSETS_BUBBLE_TITLE,
+  // Internal border around checkboxes and radio buttons.
+  INSETS_CHECKBOX_RADIO_BUTTON,
   // The margins around the button row of a dialog. The top margin is implied
   // by the content insets.
   INSETS_DIALOG_BUTTON_ROW,
diff --git a/ui/views/mus/aura_init.cc b/ui/views/mus/aura_init.cc
index ec0bb006..f53872d 100644
--- a/ui/views/mus/aura_init.cc
+++ b/ui/views/mus/aura_init.cc
@@ -52,9 +52,40 @@
 
 }  // namespace
 
-AuraInit::AuraInit() {
+AuraInit::AuraInit(service_manager::Connector* connector,
+                   const service_manager::Identity& identity,
+                   const std::string& resource_file,
+                   const std::string& resource_file_200,
+                   scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
+                   Mode mode)
+    : resource_file_(resource_file),
+      resource_file_200_(resource_file_200),
+      env_(aura::Env::CreateInstance(
+          (mode == Mode::AURA_MUS || mode == Mode::AURA_MUS_WINDOW_MANAGER)
+              ? aura::Env::Mode::MUS
+              : aura::Env::Mode::LOCAL)) {
   if (!ViewsDelegate::GetInstance())
     views_delegate_ = base::MakeUnique<MusViewsDelegate>();
+  if (mode == Mode::AURA_MUS) {
+    mus_client_ =
+        base::WrapUnique(new MusClient(connector, identity, io_task_runner));
+  }
+  ui::MaterialDesignController::Initialize();
+  if (!InitializeResources(connector))
+    return;
+
+// Initialize the skia font code to go ask fontconfig underneath.
+#if defined(OS_LINUX)
+  font_loader_ = sk_make_sp<font_service::FontLoader>(connector);
+  SkFontConfigInterface::SetGlobal(font_loader_.get());
+#endif
+
+  // There is a bunch of static state in gfx::Font, by running this now,
+  // before any other apps load, we ensure all the state is set up.
+  gfx::Font();
+
+  ui::InitializeInputMethodForTesting();
+  initialized_ = true;
 }
 
 AuraInit::~AuraInit() {
@@ -69,65 +100,15 @@
 #endif
 }
 
-std::unique_ptr<AuraInit> AuraInit::Create(
-    service_manager::Connector* connector,
-    const service_manager::Identity& identity,
-    const std::string& resource_file,
-    const std::string& resource_file_200,
-    scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
-    Mode mode) {
-  std::unique_ptr<AuraInit> aura_init = base::WrapUnique(new AuraInit());
-  if (!aura_init->Init(connector, identity, resource_file, resource_file_200,
-                       io_task_runner, mode)) {
-    aura_init.reset();
-  }
-  return aura_init;
-}
-
-bool AuraInit::Init(service_manager::Connector* connector,
-                    const service_manager::Identity& identity,
-                    const std::string& resource_file,
-                    const std::string& resource_file_200,
-                    scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
-                    Mode mode) {
-  env_ = aura::Env::CreateInstance(
-      (mode == Mode::AURA_MUS || mode == Mode::AURA_MUS_WINDOW_MANAGER)
-          ? aura::Env::Mode::MUS
-          : aura::Env::Mode::LOCAL);
-
-  if (mode == Mode::AURA_MUS) {
-    mus_client_ =
-        base::WrapUnique(new MusClient(connector, identity, io_task_runner));
-  }
-  ui::MaterialDesignController::Initialize();
-  if (!InitializeResources(connector, resource_file, resource_file_200))
-    return false;
-
-// Initialize the skia font code to go ask fontconfig underneath.
-#if defined(OS_LINUX)
-  font_loader_ = sk_make_sp<font_service::FontLoader>(connector);
-  SkFontConfigInterface::SetGlobal(font_loader_.get());
-#endif
-
-  // There is a bunch of static state in gfx::Font, by running this now,
-  // before any other apps load, we ensure all the state is set up.
-  gfx::Font();
-
-  ui::InitializeInputMethodForTesting();
-  return true;
-}
-
-bool AuraInit::InitializeResources(service_manager::Connector* connector,
-                                   const std::string& resource_file,
-                                   const std::string& resource_file_200) {
+bool AuraInit::InitializeResources(service_manager::Connector* connector) {
   // Resources may have already been initialized (e.g. when 'chrome --mash' is
   // used to launch the current app).
   if (ui::ResourceBundle::HasSharedInstance())
     return false;
 
-  std::set<std::string> resource_paths({resource_file});
-  if (!resource_file_200.empty())
-    resource_paths.insert(resource_file_200);
+  std::set<std::string> resource_paths({resource_file_});
+  if (!resource_file_200_.empty())
+    resource_paths.insert(resource_file_200_);
 
   catalog::ResourceLoader loader;
   filesystem::mojom::DirectoryPtr directory;
@@ -142,15 +123,15 @@
   if (!loader.OpenFiles(std::move(directory), resource_paths))
     return false;
   ui::RegisterPathProvider();
-  base::File pak_file = loader.TakeFile(resource_file);
+  base::File pak_file = loader.TakeFile(resource_file_);
   base::File pak_file_2 = pak_file.Duplicate();
   ui::ResourceBundle::InitSharedInstanceWithPakFileRegion(
       std::move(pak_file), base::MemoryMappedFile::Region::kWholeFile);
   ui::ResourceBundle::GetSharedInstance().AddDataPackFromFile(
       std::move(pak_file_2), ui::SCALE_FACTOR_100P);
-  if (!resource_file_200.empty())
+  if (!resource_file_200_.empty())
     ui::ResourceBundle::GetSharedInstance().AddDataPackFromFile(
-        loader.TakeFile(resource_file_200), ui::SCALE_FACTOR_200P);
+        loader.TakeFile(resource_file_200_), ui::SCALE_FACTOR_200P);
   return true;
 }
 
diff --git a/ui/views/mus/aura_init.h b/ui/views/mus/aura_init.h
index 2ba6fd2..15deb095 100644
--- a/ui/views/mus/aura_init.h
+++ b/ui/views/mus/aura_init.h
@@ -51,51 +51,42 @@
     UI
   };
 
-  ~AuraInit();
-
-  // Returns an AuraInit if initialization can be completed successfully,
-  // otherwise a nullptr is returned. If initialization fails then Aura is in an
-  // unusable state, and calling services should shutdown.
   // |resource_file| is the file to load strings and 1x icons from.
   // |resource_file_200| can be an empty string, otherwise it is the file to
   // load 2x icons from.
-  static std::unique_ptr<AuraInit> Create(
-      service_manager::Connector* connector,
-      const service_manager::Identity& identity,
-      const std::string& resource_file,
-      const std::string& resource_file_200 = std::string(),
-      scoped_refptr<base::SingleThreadTaskRunner> io_task_runner = nullptr,
-      Mode mode = Mode::UI);
+  AuraInit(service_manager::Connector* connector,
+           const service_manager::Identity& identity,
+           const std::string& resource_file,
+           const std::string& resource_file_200 = std::string(),
+           scoped_refptr<base::SingleThreadTaskRunner> io_task_runner = nullptr,
+           Mode mode = Mode::UI);
+  ~AuraInit();
 
   // Only valid if Mode::AURA_MUS was passed to constructor.
   MusClient* mus_client() { return mus_client_.get(); }
 
- private:
-  AuraInit();
-
   // Returns true if AuraInit was able to successfully complete initialization.
   // If this returns false, then Aura is in an unusable state, and calling
   // services should shutdown.
-  bool Init(
-      service_manager::Connector* connector,
-      const service_manager::Identity& identity,
-      const std::string& resource_file,
-      const std::string& resource_file_200 = std::string(),
-      scoped_refptr<base::SingleThreadTaskRunner> io_task_runner = nullptr,
-      Mode mode = Mode::UI);
+  bool initialized() { return initialized_; }
 
-  bool InitializeResources(service_manager::Connector* connector,
-                           const std::string& resource_file,
-                           const std::string& resource_file_200);
+ private:
+  bool InitializeResources(service_manager::Connector* connector);
 
 #if defined(OS_LINUX)
   sk_sp<font_service::FontLoader> font_loader_;
 #endif
 
+  const std::string resource_file_;
+  const std::string resource_file_200_;
+
   std::unique_ptr<aura::Env> env_;
   std::unique_ptr<MusClient> mus_client_;
   std::unique_ptr<ViewsDelegate> views_delegate_;
 
+  // Whether or not initialization succeeds.
+  bool initialized_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(AuraInit);
 };
 
diff --git a/ui/views/win/fullscreen_handler.cc b/ui/views/win/fullscreen_handler.cc
index 89581d79d..c35bad52 100644
--- a/ui/views/win/fullscreen_handler.cc
+++ b/ui/views/win/fullscreen_handler.cc
@@ -85,6 +85,20 @@
                  new_rect.height(),
                  SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
   }
+
+  if (!task_bar_list_) {
+    HRESULT hr = ::CoCreateInstance(CLSID_TaskbarList, NULL,
+                                    CLSCTX_INPROC_SERVER,
+                                    IID_PPV_ARGS(&task_bar_list_));
+    CHECK(SUCCEEDED(hr));
+  }
+
+  // As per MSDN marking the window as fullscreen should ensure that the
+  // taskbar is moved to the bottom of the Z-order when the fullscreen window
+  // is activated. If the window is not fullscreen, the Shell falls back to
+  // heuristics to determine how the window should be treated, which means
+  // that it could still consider the window as fullscreen. :(
+  task_bar_list_->MarkFullscreenWindow(hwnd_, !!fullscreen);
 }
 
 }  // namespace views
diff --git a/ui/views/win/fullscreen_handler.h b/ui/views/win/fullscreen_handler.h
index 9714057ed..772d275 100644
--- a/ui/views/win/fullscreen_handler.h
+++ b/ui/views/win/fullscreen_handler.h
@@ -5,11 +5,12 @@
 #ifndef UI_VIEWS_WIN_FULLSCREEN_HANDLER_H_
 #define UI_VIEWS_WIN_FULLSCREEN_HANDLER_H_
 
-#include <windows.h>
+#include <shobjidl.h>
 
 #include <map>
 
 #include "base/macros.h"
+#include "base/win/scoped_comptr.h"
 
 namespace gfx {
 class Rect;
@@ -47,6 +48,8 @@
   // Saved window information from before entering fullscreen mode.
   // TODO(beng): move to private once GetRestoredBounds() moves onto Widget.
   SavedWindowInfo saved_window_info_;
+  // Used to mark a window as fullscreen.
+  base::win::ScopedComPtr<ITaskbarList2> task_bar_list_;
 
   DISALLOW_COPY_AND_ASSIGN(FullscreenHandler);
 };